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

时间:2014-03-14 16:08:24

标签: c# asp.net asp.net-mvc validation

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

我想要做的是在用户离开页面之前确认评估员的数量确实在正确的范围内。

模型就像这样

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

public class Assessor
{
    string Email { get; set; }
    string Name { get; set; }
}

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

我正在使用ASP.net MVC。

提前致谢

3 个答案:

答案 0 :(得分:8)

自定义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;
    }
}

用法:

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

答案 1 :(得分:1)

您只需在控制器中验证:

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);
    }
    ...
}

另一种选择是编写自定义验证属性。这是example如何做到这一点(验证器有所不同,但方法很明确)。

答案 2 :(得分:1)

您可以随时添加自定义验证属性,该属性在验证模型时会被触发。

在另一个问题上查看答案: ASP.NET MVC: Custom Validation by DataAnnotation