【问题标题】:ASP.NET MVC HandleError View Not Found找不到 ASP.NET MVC HandleError 视图
【发布时间】:2011-07-01 14:38:33
【问题描述】:

我正在尝试使用 HandleError 属性在 ASP.NET MVC3 中实现异常处理。

我使用的代码如下所示:

[HandleError(Order = 1, ExceptionType = typeof(SocketsOfflineException), View="EndSystemDownError")]

当 EndSystemDownError 视图位于“共享”文件夹中时,这将按预期工作。但是,我有许多错误视图,我想将它们分离到一个专门用于错误的文件夹中,称为“错误”。

因此,我将 EndSystemDownError 视图从共享文件夹中拉出并放入 Views 文件夹中的“错误”子文件夹中。然后我将 View 属性更新为~/Views/Error/EndSystemDownError。但是,这会导致异常,指出未找到视图。我也试过/Views/Error/EndSystemDownError,结果一样。

我尝试添加带有EndSystemDownError 操作的ErrorController,这既是一种故障排除措施,也是因为我想在视图中添加一些控制器功能。这没有效果。

我似乎无法弄清楚我做错了什么。也许这是 MVC 中的一个错误,或者它不支持 Shared 文件夹之外的错误视图,这会令人失望。

【问题讨论】:

    标签: asp.net-mvc handleerror


    【解决方案1】:

    你试过了吗

    [HandleError(Order = 1, ExceptionType = typeof(SocketsOfflineException), View="Error/EndSystemDownError")]
    

    【讨论】:

    • 我尝试了Error/EndSystemDownError/Error/EndSystemDownError 均无济于事。
    • @David Marchelya,是的,那是因为 HandleError 属性不支持它。
    【解决方案2】:

    AFAIK 您无法修改这些视图的位置。他们应该在~/Views/Shared。您可以根据异常类型指定名称:

    [HandleError(
        Order = 1, 
        ExceptionType = typeof(SocketsOfflineException), 
        View = "EndSystemDownError"
    )]
    

    EndSystemDownError 视图在~/Views/Shared/EndSystemDownError.aspx 中的位置。

    【讨论】:

    • 我也会这么说。由于有很多约定,这不是不同的情况。如果我正在搜索错误视图,我会先在 ~/Views/Shared 文件夹中查找它:)
    【解决方案3】:

    如果你把你的errors子文件夹放在共享文件夹里面,你可以通过Errors/whatevererror.aspx来引用它,应该没问题。

    我经常这样做。毕竟它们是共享的视图。 :)

    【讨论】:

    • 这完成了我正在寻找的错误视图的隔离。谢谢!
    【解决方案4】:

    Orchard 模块编程的旁注:

    HandleError 属性在 Orchard 模块中不起作用,因为 Orchard 自己实现了自定义过滤器处理。

    您需要实现覆盖OnResultExecuted()FilterProvider 以捕获视图中抛出的异常。

    src\Orchard\Exceptions\Filters\UnhandledExceptionFilter.cs,它实现了常见的Orchard错误页面。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      • 2011-05-11
      • 1970-01-01
      • 1970-01-01
      • 2010-10-11
      相关资源
      最近更新 更多