【问题标题】:How to validate number of items in a list in mvc model如何验证mvc模型中列表中的项目数
【发布时间】:2014-03-14 16:08:23
【问题描述】:

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

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

模型是这样的

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

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

我有 Assessor 类的验证属性,因此每次用户添加评估者时我都可以验证这一点,但我不知道如何验证 Assessors List 上的计数。

我正在使用 ASP.net MVC。

提前致谢

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

  • 这似乎不起作用 IsValid 方法上的值始终为 0。
【解决方案2】:

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

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 如何做到这一点(那里的验证器不同,但方法很明确)。

【讨论】:

    【解决方案3】:

    您始终可以添加一个自定义验证属性,该属性会在验证模型时触发。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-17
      相关资源
      最近更新 更多