具有异常参数的ModelState.AddModelError的用途

时间:2010-09-22 02:12:59

标签: asp.net-mvc-2

AddModelError()的重载是否可用于将Exception作为参数?

如果我在控制器中包含以下代码:

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.") %>

然后,错误摘要中仅显示“Something出错”文本。

1 个答案:

答案 0 :(得分:3)

检查源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。这是我在MVC 2和MVC 3中都能找到的唯一真正的参考。

那说经常使用它可能是不必要的。