другая страница ошибки для частичного просмотра - PullRequest
2 голосов
/ 28 августа 2011

У меня есть страница Error со всеми Layout и Header, которая прекрасно работает, когда ошибка произошла в главном представлении, она показывает страницу ошибки правильно. Но когда при рендеринге возникает какая-либо ошибка, она нарушает весь пользовательский интерфейс, поскольку на странице ошибки также есть заголовок

.

Так что я хотел знать внутри Global.asax (application_Error), что если запрос для частичного просмотра, перенаправьте его на страницу PartialError, иначе перенаправьте на страницу Fullerror.

Пожалуйста, дайте мне знать, как мне этого добиться. Благодарю.

1 Ответ

1 голос
/ 28 августа 2011

Я предлагаю использовать атрибут фильтра.Вы можете реализовать что-то вроде этого:

public class RedirectOnErrorAttribute : FilterAttribute, IExceptionFilter {

bool IsPartialRequest = false;

public void OnException(ExceptionContext filterContext) {
        if(filterContext.ExceptionHandled) return;
        /*then you can redirect to a specific page or to, for example,
special error handling controller*/
         filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Error", action = "HandleError", isPartialError = IsPartialRequest }));
         filterContext.ExceptionHandled = true;
         filterContext.HttpContext.Response.Clear();
}
}

А в контроллере обработки ошибок в методе действия HandleError вы можете вернуть определенный View в зависимости от параметра isPartialError.Кстати, вы можете сделать другие полезные вещи в этом методе действия - например, записать информацию об ошибке в журнале.

Чтобы использовать этот атрибут, вы можете украсить его классами контроллера:

[RedirectOnError]
public class MyController : Controller {

  public ViewResult Index () {}
  public ActionResult Create() {}

  [RedirectOnError(IsPartialRequest=true)]
  public PartialViewResult ListCategories() {}

}

обратите вниманиена использование атрибута методом ListCategories - я прямо сказал, что это частичный запрос.Причина, по которой я это сделал, проста - система маршрутизации ничего не знает о том, что результат будет использоваться как частичный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...