找不到ASP.NET MVC HandleError视图

时间:2011-02-21 22:18:17

标签: asp.net-mvc handleerror

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

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

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

当EndSystemDownError视图位于“Shared”文件夹中时,这可以正常工作。但是,我有许多错误视图,我想将它们分成专门用于错误的文件夹,称为“错误”。

因此,我将EndSystemDownError视图从共享文件夹中拉出,并进入Views文件夹中的“Error”子文件夹。然后我将View属性更新为~/Views/Error/EndSystemDownError。但是,这会导致异常,说明未找到该视图。我也尝试了/Views/Error/EndSystemDownError,结果相同。

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

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

4 个答案:

答案 0 :(得分:3)

AFAIK您无法修改这些视图的位置。它们应该在~/Views/Shared。您可以按照例外类型指定名称:

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

EndSystemDownError视图位于~/Views/Shared/EndSystemDownError.aspx

答案 1 :(得分:1)

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

我经常这样做。毕竟他们是共享的观点。 :)

答案 2 :(得分:0)

你试过

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

答案 3 :(得分:0)

Orchard模块编程的附注:

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

您需要实现一个覆盖FilterProvider的{​​{1}}来捕获视图中抛出的异常。

请参阅OnResultExecuted(),它实现了常见的Orchard错误页面。