如何在mvc模型中验证列表中的项目数

fra*_*res 4 c# asp.net validation asp.net-mvc

我正在写一份在线评估表.在此表格上,用户必须选择至少3人,最多7人将对他们进行评估.我有一个用户添加评估者的表单,我在此表单下方显示列表.一旦用户完成添加评估员,然后单击自我评估按钮以填写他/她自己的自我评估.

我想要做的是验证在用户离开页面之前评估者的数量确实在正确的范围内.

模型是这样的

public class AssessorsViewModel
{
    List<Assessor> Assessors { get; set; }
}

public class Assessor
{
    string Email { get; set; }
    string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有Assessor类的验证属性,因此每次用户添加评估器时我都可以对此进行验证,但我无法弄清楚如何验证评估者列表上的Count.

我正在使用ASP.net MVC.

提前致谢

Nei*_*ith 9

自定义ValidationAttribute会为您执行此操作:

public class LimitCountAttribute : ValidationAttribute
{
    private readonly int _min;
    private readonly int _max;

    public LimitCountAttribute(int min, int max) {
        _min = min;
        _max = max;
    }

    public override bool IsValid(object value) {
        var list = value as IList;
        if (list == null)
            return false;

        if (list.Count < _min || list.Count > _max)
            return false;

        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

public class AssessorsViewModel
{
    [LimitCount(3, 7, ErrorMessage = "whatever"]
    List<Assessor> Assessors { get; set; }
}
Run Code Online (Sandbox Code Playgroud)


And*_*rei 3

您可以简单地在控制器中验证这一点:

public ActionResult TheAction(AssessorsViewModel model)
{
    if (model.Assessors == null
        || model.Assessors.Count < 3
        || model.Assessors.Count > 7)
    {
        ModelState.AddModelError("Assessors", "Please enter note less than 3 and not more than 7 assessors.");
        return View(model);
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

另一种选择是编写自定义验证属性。这是如何执行此操作的示例(验证器不同,但方法很清楚)。