2

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

我正在使用的代码如下所示:

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

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

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

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

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

4

4 回答 4

3

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

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

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

于 2011-02-21T22:31:38.747 回答
1

如果您将错误子文件夹放在共享文件夹中,您可以通过 Errors/whatevererror.aspx 引用它,它应该没问题。

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

于 2011-02-21T22:37:54.217 回答
0

你试过了吗

[HandleError(Order = 1, ExceptionType = typeof(SocketsOfflineException), View="Error/EndSystemDownError")]
于 2011-02-21T22:23:03.817 回答
0

Orchard 模块编程的旁注:

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

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

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

于 2015-04-09T10:33:50.543 回答