使用modelstate.addmodelerror进行MVC自定义验证

时间:2014-10-11 08:51:05

标签: c# asp.net-mvc validation

我有一个入站视图模型列表,它基本上有四个属性。

public class Complaint
{
    public int Id { get; set;}
    public string Comments { get; set; }
    public int RuleId { get; set; }
    public int ResponseId { get; set; }
}

数据正常,我可以看到它绑定到我的List控制器项目。

根据RuleId中包含的数据,使ResponseId和Comments具有不同的验证要求。我正在寻找使用ModelState.AddModelError来实现这一目标。在过去,当我不得不进行这种形式的验证时,我在View上修改了字段名称。但是这个应用程序,我可以有6个组,我可以有20个.AddModelError获取属性名称来关联错误,正如我所提到的,我的列表中有可变数量的项目。

有谁知道如何循环我的列表并知道我正在检查的项目与我的视图中的特定表单字段有关吗?

foreach(var complaint in List<Complaint>)
{
    if (complaint.RuleId == 1) && (complaint.Comments == null)
    {
        ModelState.AddModelError("INDIVIDUAL PROPERTY NAME NEEDED", "error message");
    }
}

提前致谢

1 个答案:

答案 0 :(得分:2)

尝试(假设modelList<Complaint>

for(int i = 0; i < model.Count; i++)
{
  if (model[i].RuleId == 1) && (model[i].Comments == null)
  {
    string propertyName = string.Format("[{0}].Comments", i); // returns "[0].Comments", "[1].Comments" etc
    ModelState.AddModelError(propertyName , "error message");
  }
}

这假设您使用for循环或自定义EditorTemplateComplaint.cs

在视图中生成控件