que*_*en3 7 asp.net-mvc firefox
我在jQuery中使用ajaxForm,并且Firefox存在一个问题 - 由于某种原因它不保留X-Requested-With
自定义标头(用于检测IsAjaxRequest()
).这导致我的控制器操作返回完整视图而不是部分,因为IsAjasxRequest()
重定向后返回false.
此错误仅发生在Firefox中,例如在Chrome中可以正常工作.
你可以看到提到这个bug 在这里.一个非常古老的帖子,所以我想知道为什么它仍然发生在我身上(我使用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"];
}
Run Code Online (Sandbox Code Playgroud)
有用; 但是,我有两个问题:
更新:对于那些对此问题感兴趣的人,Request.Headers.Add与IIS6(或者IIS5,但无论如何)有问题.所以正确的方法是在TempData/HttpContext.Items/base控制器中存储这个"isAjaxRequest"标志.
小智 5
为了防止其他人在想知道为什么他们的基于头部的调度在Firefox中失败之后偶然发现这个问题,这个问题在2010-10-11没有修复,在Firefox 3.6.10中测试过
https://bugzilla.mozilla.org/show_bug.cgi?id=553888是相应的错误,根据截至今日的最新评论(由Jonas撰写,2010-09-16),这个问题将不会在Firefox中修复4.
此外,这个错误似乎扩展到标准的可设置标题,例如Accept,这意味着Accept: application/json
重定向后将会消失,而xhr引擎很可能会获得HTML响应.
归档时间: |
|
查看次数: |
2312 次 |
最近记录: |