ASP.NET MVC HandleError Представление не найдено - PullRequest
2 голосов
/ 22 февраля 2011

Я пытаюсь реализовать обработку исключений в ASP.NET MVC3 с помощью атрибута HandleError.

Код, который я использую, выглядит следующим образом:

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

Это работает какожидается, когда представление EndSystemDownError находится в папке «Shared».Однако у меня есть несколько представлений ошибок, и я хочу выделить их в папку, специально предназначенную для ошибок, которая называется «Ошибка».

Поэтому я извлекаю представление EndSystemDownError из общей папки и в «Ошибка »в папке« Папки ».Затем я обновляю свойство View до ~/Views/Error/EndSystemDownError.Это, однако, приводит к исключению, утверждающему, что представление не было найдено.Я также пробовал /Views/Error/EndSystemDownError с теми же результатами.

Я пытался добавить ErrorController с действием EndSystemDownError, как в качестве меры по устранению неполадок, так и потому, что я хотел бы добавить некоторые функции контроллерана вид.Это не имеет никакого эффекта.

Я не могу понять, что я делаю неправильно.Возможно, это ошибка в MVC, или, возможно, она не поддерживает представления ошибок вне общей папки, что может разочаровать.

Ответы [ 4 ]

3 голосов
/ 22 февраля 2011

AFAIK, вы не можете изменить расположение этих видов. Они должны быть в ~/Views/Shared. Вы можете указать имя для каждого типа исключения:

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

где EndSystemDownError представление находится в ~/Views/Shared/EndSystemDownError.aspx.

1 голос
/ 22 февраля 2011

Если вы поместите вашу подпапку ошибок в общую папку, вы можете обратиться к ней по адресу Errors / whatevererror.aspx, и все должно быть в порядке.

Я делаю это часто. Ведь они являются общими взглядами. :)

0 голосов
/ 09 апреля 2015

Примечание для программирования модуля Orchard:

Атрибут HandleError не будет работать в модулях Orchard, поскольку Orchard сам реализует пользовательский фильтр, обрабатывающий.

Вам необходимо реализовать FilterProvider, который переопределяет OnResultExecuted(), чтобы перехватывать исключения, генерируемые в представлении.

См. src\Orchard\Exceptions\Filters\UnhandledExceptionFilter.cs, он реализует страницу общих ошибок Orchard.

0 голосов
/ 22 февраля 2011

ты пробовал

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