Reputation: 3432
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.
Upvotes: 2
Views: 2747
Reputation: 5155
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.
Upvotes: 0
Reputation: 3680
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. :)
Upvotes: 1
Reputation: 1038720
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
.
Upvotes: 3
Reputation: 5646
did you try
[HandleError(Order = 1, ExceptionType = typeof(SocketsOfflineException), View="Error/EndSystemDownError")]
Upvotes: 0