gpt4 book ai didi

c# - 带有自定义异常的 ASP.NET MVC 2 模型错误

转载 作者:行者123 更新时间:2023-12-02 01:21:20 27 4
gpt4 key购买 nike

我有一个自定义异常类:

public class MyException: Exception
{
public MyException(MyExceptionEnum myError) : base(myError.ToDescription()) { }
public MyException(MyExceptionEnum myError, Exception innerException) : base(myError.ToDescription(), innerException) { }
}

.ToDescriptionMyExceptionEnum 的扩展方法,用于为异常错误详细信息提供枚举到字符串的映射。

这是我如何抛出它:

if (someCondition)
throw new MyException(MyExceptionEnum.SomeError);

所以我使用我的第一个构造函数,它使用给定的消息创建一个新的异常。

现在进入 Controller :

[HttpPost]
public ActionResult UpdateFoo(Foo model)
{
try
{
_fooService.UpdateModel(model);
_unitOfWork.Commit();
}
catch(MyException myException)
{
ViewData.ModelState.AddModelError("ModelErrors", myException);
}

return View("Index", model);
}

最后是 View 中的片段:

<%: Html.ValidationMessage("ModelErrors") %>

不起作用(调试时抛出异常,错误被添加到模型状态,但页面上没有显示任何内容)。

但是如果我更改为以下行:

ViewData.ModelState.AddModelError("ModelErrors", myException.Message);

它有效。

AddModelError 有两个重载:

  1. 字符串,异常(对我不起作用)
  2. 字符串,字符串(有效)

那么第一个重载有什么用呢?我的异常确实有一个内部异常消息,所以我会认为 HTML 扩展会呈现它?

那么我们如何使用 ModelState 处理自定义异常呢?使用第二个重载是否正确?

最佳答案

无论是自定义异常还是预定义异常都没关系。它就是行不通。如果您有机会查看 ModelError 类的 MVC 源代码,您可以看到它有一个公共(public)字符串属性 ErrorMessage,用于在验证时显示错误发生(在 ValidationExtensions 类中)。

但是,在ModelError(Exception异常)的重载构造函数中,它只是将ErrorMessage属性设置为空字符串,而不是exception.Message强>。这就是为什么你什么也看不到的原因。

关于c# - 带有自定义异常的 ASP.NET MVC 2 模型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4029330/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com