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(“某物”)-也不起作用。