ASP.NET MVC HandleError View Not Found

*爱你&永不变心* 提交于 2019-12-06 11:07:44

问题


I'm trying to implement exception handling in ASP.NET MVC3 using the HandleError attribute.

The code that I'm using looks like this:

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

This works as expected when the EndSystemDownError view is located in the "Shared" folder. However, I have a number of Error views, and I want to separate them out into a folder specifically for Errors, called "Error".

So I pull the EndSystemDownError view out of the shared folder and into an "Error" subfolder in the Views folder. I then update the View property to ~/Views/Error/EndSystemDownError. This however results in an exception stating that the view was not found. I tried /Views/Error/EndSystemDownError as well, with the same results.

I have tried adding an ErrorController with an EndSystemDownError action, both as a troubleshooting measure, and because I would like to add some controller functionality to the view. This has no effect.

I can't seem to figure out what I'm doing wrong. Perhaps this is a bug in MVC, or maybe it doesn't support error views outside of the Shared folder, which would be disappointing.


回答1:


If you put your errors subfolder inside of the shared folder, you can refer to it by Errors/whatevererror.aspx and it should be fine.

I do this frequently. After all they are shared views. :)




回答2:


AFAIK you cannot modify the location of those views. They should be in ~/Views/Shared. You could specify the name though per exception type:

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

where the EndSystemDownError view is located in ~/Views/Shared/EndSystemDownError.aspx.




回答3:


did you try

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



回答4:


Side note for Orchard module programming:

The HandleError attribute won't work in Orchard modules as Orchard implements a custom filter handling itself.

You need to implement a FilterProvider that overrides the OnResultExecuted() to catch exceptions thrown in a view.

See src\Orchard\Exceptions\Filters\UnhandledExceptionFilter.cs, it implements the common Orchard error page.



来源:https://stackoverflow.com/questions/5071903/asp-net-mvc-handleerror-view-not-found

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!