Я использую ajaxForm с jQuery, и есть одна проблема с Firefox - по какой-то причине он не сохраняет X-Requested-With
пользовательский заголовок (который используется для обнаружения IsAjaxRequest ()
). Это приводит к тому, что действие моего контроллера возвращает полный просмотр вместо частичного, поскольку IsAjasxRequest ()
возвращает false после перенаправления.
Эта ошибка возникает только в Firefox, например, в Chrome работает нормально.
Вы можете см. упомянутую ошибку здесь . Довольно старый пост, поэтому мне интересно, почему это все еще происходит со мной (я использую Firefox 3.5.3). В любом случае, вот решение, которое я изобрел - в моем базовом классе контроллеров:
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
var ajaxRequestBeforeRedirect = TempData["__isajaxrequest"] as string;
if (ajaxRequestBeforeRedirect != null)
Request.Headers.Add("X-Requested-With", ajaxRequestBeforeRedirect);
}
private bool IsRedirectResult(ActionResult result)
{
return result.GetType().Name.ToLower().Contains("redirect");
}
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
if (IsRedirectResult(filterContext.Result) && Request.Headers["X-Requested-With"] != null)
TempData["__isajaxrequest"] = Request.Headers["X-Requested-With"];
}
Это работает; Однако у меня есть два вопроса:
ОБНОВЛЕНИЕ: для тех, кто интересуется этой проблемой, у Request.Headers.Add есть проблемы с IIS6 (или, возможно, IIS5, но в любом случае). Поэтому правильным способом было бы сохранить этот флаг «isAjaxRequest» в контроллере TempData / HttpContext.Items / base.