Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在mvc模型中验证列表中的项目数_C#_Asp.net_Asp.net Mvc_Validation - Fatal编程技术网

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

C# 如何在mvc模型中验证列表中的项目数,c#,asp.net,asp.net-mvc,validation,C#,Asp.net,Asp.net Mvc,Validation,我正在写一份在线评估表。在此表单上,用户必须选择至少3人,最多7人,对他们进行评估。我有一个表单,用户在其中添加评估员,我在该表单下面显示列表。用户完成添加评估员后,单击“自我评估”按钮填写自己的自我评估 我想做的是在用户离开页面之前验证评估员的数量是否在正确的范围内 模型是这样的 public class AssessorsViewModel { List<Assessor> Assessors { get; set; } } public class Assessor

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

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

模型是这样的

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

public class Assessor
{
    string Email { get; set; }
    string Name { get; set; }
}
公共类评估员视图模型
{
列出评估员{get;set;}
}
公开课评审员
{
字符串电子邮件{get;set;}
字符串名称{get;set;}
}
我有Assessor类的validation属性,因此每次用户添加Assessor时,我都可以对此进行验证,但我不知道如何验证Assessors列表上的计数

我正在使用ASP.NETMVC


提前感谢

您只需在控制器中验证即可:

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);
    }
    ...
}
公共行动结果行动(评估者视图模型)
{
如果(model.Assessors==null
||model.Assessors.Count<3
||model.Assessors.Count>7)
{
AddModelError(“评估员”,“请输入少于3名且不超过7名评估员的注释”);
返回视图(模型);
}
...
}

另一个选项是编写自定义验证属性。下面是一个如何做到这一点的示例(那里的验证器不同,但方法很明确)。

一个自定义的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;
    }
}
公共类LimitCountAttribute:ValidationAttribute
{
私有只读int_min;
私有只读int_max;
公共LimitCountAttribute(最小整数、最大整数){
_min=min;
_max=max;
}
公共覆盖布尔值有效(对象值){
var list=作为IList的值;
if(list==null)
返回false;
如果(list.Count<|u min | list.Count>_max)
返回false;
返回true;
}
}
用法:

public class AssessorsViewModel
{
    [LimitCount(3, 7, ErrorMessage = "whatever"]
    List<Assessor> Assessors { get; set; }
}
公共类评估员视图模型
{
[LimitCount(3,7,ErrorMessage=“随便什么”]
列出评估员{get;set;}
}

您始终可以添加自定义验证属性,该属性将在验证模型时被激发

在此处检查另一个问题的答案:

此方法的可能重复项似乎不起作用IsValid方法上的值始终为0。