Firefox не делает сохранение пользовательских заголовков во время перенаправления запроса Ajax: решение ASP.NET MVC

Я использую 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"];
  }

Это работает; Однако у меня есть два вопроса:

  1. Эта ошибка действительно не исправлена ​​в Firefox, или я не что-то не понимаете?
  2. Это хорошее решение? Есть ли что-нибудь лучше? Я не могу поверить, что ни у кого не было этой проблемы раньше.

ОБНОВЛЕНИЕ: для тех, кто интересуется этой проблемой, у Request.Headers.Add есть проблемы с IIS6 (или, возможно, IIS5, но в любом случае). Поэтому правильным способом было бы сохранить этот флаг «isAjaxRequest» в контроллере TempData / HttpContext.Items / base.

7
задан queen3 4 May 2010 в 14:51
поделиться