加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-2 – 具有异常参数的ModelState.AddModelError的用

发布时间:2020-12-16 03:51:38 所属栏目:asp.Net 来源:网络整理
导读:有没有使用 AddModelError()的重载将异常作为参数? 如果我在控制器中包含以下代码: ModelState.AddModelError( "",new Exception("blah blah blah") );ModelState.AddModelError( "","Something has went wrong" );if (!ModelState.IsValid) return View(
有没有使用 AddModelError()的重载将异常作为参数?

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

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出错”文本.

解决方法

检查源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中可以找到的唯一真正的参考.

这说明经常使用它可能是不必要的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读