如何确定ModelState的哪个键有错误

时间:2013-03-08 14:19:36

标签: c# asp.net-mvc modelstate

当ModelState.IsValid为false时,如何确定ModelState中哪些键包含错误?通常我只是将鼠标悬停在ModelState.Values列表中,逐项检查错误计数>但是现在我正在研究一个包含复杂对象列表的视图,共有252个ModelState项(每个列表的每个对象的每个项在ModelState.Keys上都有一个条目)。

那么,是否有更容易指出错误来源的方法?

2 个答案:

答案 0 :(得分:22)

您可以查看ViewData.ModelState.Values集合,看看有哪些错误。

[Httpost]
public ActionResult Create(User model)
{
   if(ModelState.IsValid)
   {
     //Save and redirect
   }
   else
   {
     foreach (var modelStateVal in ViewData.ModelState.Values)
     {
       foreach (var error in modelStateVal.Errors)
       {               
          var errorMessage = error.ErrorMessage;
          var exception = error.Exception;
          // You may log the errors if you want
       }
     }
   }         
   return View(model);
 }
}

如果你真的想要Keys(属性名称),你可以遍历ModelState.Keys

foreach (var modelStateKey in ViewData.ModelState.Keys)
{
    var modelStateVal = ViewData.ModelState[modelStateKey];
    foreach (var error in modelStateVal.Errors)
    {
        var key = modelStateKey; 
        var errorMessage = error.ErrorMessage;
        var exception = error.Exception;
        // You may log the errors if you want
    }
}

答案 1 :(得分:2)

ModelState.Values.SelectMany(v => v.Errors);

被认为更清洁。