17

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

那么,有没有更简单的方法来指出错误来源呢?

4

2 回答 2

32

您可以检查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);
 }
}

如果您真的想要键(属性名称),您可以遍历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
    }
}
于 2013-03-08T14:21:23.233 回答
2
ModelState.Values.SelectMany(v => v.Errors);

被认为更清洁。

于 2013-07-08T15:23:16.013 回答