我将 ajaxForm 与 jQuery 一起使用,但 Firefox 存在一个问题 - 由于某种原因它没有保留 X-Requested-With自定义 header (用于检测 IsAjaxRequest() )。这导致我的 Controller 操作返回完整 View 而不是部分 View ,因为 IsAjasxRequest()重定向后返回 false。

此错误仅发生在 Firefox 中,例如在 Chrome 中运行良好。

您可以看到提到的这个错误 here .一个很老的帖子,所以我想知道为什么它仍然发生在我身上(我使用 Firefox 3.5.3)。无论如何,这是我发明的解决方案 - 在我的基本 Controller 类中:

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

有用;但是,我在这里有两个问题:
  • 这个错误真的没有在 Firefox 中修复还是我不明白?
  • 这是一个很好的解决方案吗?有没有更好的?我不敢相信以前没有人遇到过这个问题。

  • 更新:对于那些对此问题感兴趣的人,Request.Headers.Add 与 IIS6(或者可能是 IIS5,但无论如何)有问题。所以正确的方法是将这个“isAjaxRequest”标志存储在 TempData/HttpContext.Items/base Controller 中。

    请您参考如下方法:

    以防万一其他人在想知道为什么他们的基于 header 的调度在 Firefox 中失败后偶然发现了这个问题,这在 2010 年 10 月 11 日没有得到修复,在 Firefox 3.6.10 中测试

    https://bugzilla.mozilla.org/show_bug.cgi?id=553888是相应的错误,从今天的最新评论(乔纳斯,2010 年 9 月 16 日发表)来看,这个问题不会在 Firefox 4 中修复。

    此外,这个错误似乎扩展到标准的可设置标题,例如 Accept,意思是 Accept: application/json重定向后将消失,您的 xhr 引擎很可能会收到 HTML 响应。


    评论关闭
    IT干货网

    微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!