Обработка исключений открывает страницу ошибки внутри текущей страницы - PullRequest
1 голос
/ 18 июля 2009

В моем приложении ASP.NET MVC я обрабатываю ошибки, переопределяя OnException в контроллере. Происходит следующее: если на странице возникает ошибка во время выполнения, страница Error.aspx открывает внутри страницу, на которой произошла ошибка. Вот код (с некоторыми дополнительными сообщениями об ошибках, удаленными):

Protected Overrides Sub OnException(ByVal filterContext As System.Web.Mvc.ExceptionContext)
    MyBase.OnException(filterContext)

    filterContext.ExceptionHandled = True
    View("Error").ExecuteResult(ControllerContext)

End Sub

Страница Error.aspx находится в общем каталоге. В качестве примера, скажем, мой View имеет тип Author, а у моей модели свисает таблица Book, а у пользователя нет прав на чтение в Book. Когда я пытаюсь ссылаться на

<%=Model.Books.Count>

вся страница Error.aspx отображается в том месте, где должен был находиться счетчик. Как я могу получить это, чтобы перенаправить на страницу ошибки и оставить страницу проблемы позади?

Обновление:

Более простой пример - просто поставить

<% Throw New Exception("b0rkd")%>

вверху представления. Error.aspx полностью отображается в том месте, где вы поместили исключение, внутри исходной страницы.

1 Ответ

2 голосов
/ 18 июля 2009

Редактировать

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

protected override void OnException( ExceptionContext filterContext )
{
    filterContext.ExceptionHandled = true;
    filterContext.HttpContext.Response.ClearContent();
    ViewResult view = new ViewResult { ViewName = "Error" };
    view.ExecuteResult( filterContext.Controller.ControllerContext );
}

Оригинал

Установите результат в filterContext для вашего представления ошибок вместо того, чтобы отображать представление ошибок в ответ.

 filterContext.ExceptionHandled = true;
 filterContext.Result = View("Error" );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...