我将 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"];
}
有用;但是,我在这里有两个问题:
更新:对于那些对此问题感兴趣的人,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 响应。