【问题标题】:Request.IsAjaxRequest returns falseRequest.IsAjaxRequest 返回 false
【发布时间】:2009-11-09 18:28:54
【问题描述】:

我有一个 MVC 项目,其中有一个带有提交按钮的表单。我添加了一个拦截表单提交事件的 jquery 客户端处理程序。 javascript 函数调用与没有 javascript 时调用的相同的 MVC 操作。

 $("form[action ='/List/CreateItem']").submit(
            function() {
                $.post($(this).attr("action"), $(this).serialize(), function(response) { $("#results").html(response); });
                return false;
            }
            );

在调用的 MVC 操作中,我测试 Request.IsAjaxRequest 以决定是返回视图还是返回 JSON 结果。我的问题是 Request.IsAjaxRequest 返回 false,即使我知道调用是从 jquery 函数发出的。 (我知道这一点,因为如果我在 jquery 函数中注释掉 $.post 行并留下 return false 行,则什么也不会发生。如果我取消注释该行,则执行该操作 - 但它返回视图,因为 IsAjaxRequest 是错误。)

这行是否应该导致 Request.IsAjaxRequest 为真?

【问题讨论】:

  • $.post 确实设置X-Requested-With,因此设置IsAjaxRequest
  • 这篇文章或许能解决你的问题:britishdeveloper.co.uk/2010/10/…
  • 我见过在通过 ajax 加载多个页面部分时 Request.IsAjaxRequest() 随机返回 false 的情况。我开始在查询中添加partial=1 参数并在控制器中添加bool partial = Request.IsAjaxRequest() || !string.IsNullOrEmpty(Request["partial"]); 以确保在浏览时获得关于ajax 调用的部分页面和完整页面。

标签: jquery asp.net-mvc


【解决方案1】:

Request.IsAjaxRequest 属性应该反映X-Requested-With HTTP 标头的存在。这个标头实际上是发送到服务器的吗?正如 James 所建议的那样,尝试使用 Fiddler 或类似的代理服务器替代方案对此进行分析。

【讨论】:

    【解决方案2】:

    嗯...我很抱歉。我不知道发生了什么变化,但现在 IsAjaxRequest 正在返回 true。我比较了上面发布的代码和现在正在执行的代码,我看不出有什么区别。我以前在这件事上反复作假,现在我反复作真。当然我错过了一些东西,但我没有看到它。

    【讨论】:

    • 这太疯狂了,但同样的事情发生在我身上。好吧。反正我不介意。
    【解决方案3】:

    我不确定会有什么区别,但一种可能的方法来确定是否有一个是使用像 Fiddler (www.fiddlertool.com) 这样的 HTTP 分析工具并查找两个调用之间可能存在的差异。

    【讨论】:

      【解决方案4】:
      猜你喜欢
      • 2015-01-20
      • 1970-01-01
      • 1970-01-01
      • 2012-03-25
      • 1970-01-01
      • 2019-06-27
      • 1970-01-01
      • 1970-01-01
      • 2014-10-18
      相关资源
      最近更新 更多