2009-10-19 16 views
7

Używam ajaxForm z jQuery, a jest jeden problem z Firefoksem - z jakiegoś powodu nie zachowuje on niestandardowego nagłówka (który jest używany do wykrywania ). Powoduje to, że działanie kontrolera zwraca pełny widok zamiast częściowego, ponieważ IsAjasxRequest() zwraca wartość false po przekierowaniu.Firefox nie zachowuje niestandardowych nagłówków podczas przekierowania żądania Ajax: rozwiązanie ASP.NET MVC

Ten błąd występuje tylko w przeglądarce Firefox, na przykład działa w Chrome.

Możesz zobaczyć ten błąd wymieniony here. Ładny stary post, więc zastanawiam się, dlaczego wciąż mi się to przydarza (używam Firefoksa 3.5.3). Tak czy inaczej, oto rozwiązanie wymyśliłem - w mojej klasie kontrolera podstawa:

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"]; 
    } 

Działa; jednak mam tu dwa pytania:

  1. Czy ten błąd nie został naprawiony w Firefoksie, czy coś nie rozumiem?
  2. Czy to dobre rozwiązanie? Czy jest coś lepszego? Nie mogę uwierzyć, że nikt wcześniej nie miał tego problemu.

AKTUALIZACJA: dla tych, którzy są zainteresowani tym problemem, Request.Headers.Add ma problemy z IIS6 (lub może IIS5, ale tak). Prawidłowy sposób przechowywania tej flagi "isAjaxRequest" w TempData/HttpContext.Items/base controller.

+0

Uważa się, że jest to również błąd typu "firefox" i musi zostać naprawiony. –

Odpowiedz

5

Just in case cudzych potknięć na to pytanie po zastanawiać, dlaczego ich dyspozytorskich nagłówka oparte nie w Firefoksie, to nie jest ustalona na dzień 2010-10-11, testowane w Firefoksie 3.6.10

https://bugzilla.mozilla.org/show_bug.cgi?id=553888 jest Odpowiedni błąd i najnowsze komentarze od dnia dzisiejszego (wykonane przez Jonas, wyprodukowane w dniu 2010-09-16) ten problem będzie nie być naprawiony w Firefoksie 4.

Co więcej, ten błąd wydaje się rozszerzać do standardowych konfigurowalnych nagłówków takie jak Accept, co oznacza, że ​​Accept: application/json zniknie po przekierowaniu, a twój silnik xhr najprawdopodobniej uzyska odpowiedź HTML.

Powiązane problemy