Asp.net mvc 2 ModelState.AddModelError的用途及异常参数
将异常作为参数的()重载是否有用 如果我在控制器中包含以下代码:Asp.net mvc 2 ModelState.AddModelError的用途及异常参数,asp.net-mvc-2,Asp.net Mvc 2,将异常作为参数的()重载是否有用 如果我在控制器中包含以下代码: ModelState.AddModelError( "", new Exception("blah blah blah") ); ModelState.AddModelError( "", "Something has went wrong" ); if (!ModelState.IsValid) return View( model ); 我认为: <%= Html.ValidationSummary( "Pl
ModelState.AddModelError( "", new Exception("blah blah blah") );
ModelState.AddModelError( "", "Something has went wrong" );
if (!ModelState.IsValid)
return View( model );
我认为:
<%= Html.ValidationSummary( "Please correct the errors and try again.") %>
然后,在错误摘要中只显示文本“出错了”。检查源ModelError接受这两个选项,并且用于模型类型转换失败 在这种特殊情况下,在需要查找实际的根错误而不是一般的顶级异常消息时,需要沿着异常树抓取内部异常
foreach (ModelError error in modelState.Errors.Where(err => String.IsNullOrEmpty(err.ErrorMessage) && err.Exception != null).ToList()) {
for (Exception exception = error.Exception; exception != null; exception = exception.InnerException) {
if (exception is FormatException) {
string displayName = propertyMetadata.GetDisplayName();
string errorMessageTemplate = GetValueInvalidResource(controllerContext);
string errorMessage = String.Format(CultureInfo.CurrentCulture, errorMessageTemplate, modelState.Value.AttemptedValue, displayName);
modelState.Errors.Remove(error);
modelState.Errors.Add(errorMessage);
break;
}
}
}
正如您所看到的,它在ModelError中循环通过异常来查找FormatException。这是我在MVC2和MVC3中能找到的唯一真正的参考
也就是说,常规使用可能没有必要。我注意到MVC 3在验证摘要中似乎没有包含异常,但我不知道这是一个bug还是出于设计原因,但他们应该在文档中明确说明。我尝试传递新的FormatException(“某物”)-也不起作用。