Request.IsAjaxRequest返回false

我有一个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行并且只留下返回false行,则没有任何反应。如果我取消注释该行,则执行该操作 – 但它返回视图,因为IsAjaxRequest是假。)

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

Request.IsAjaxRequest属性应该反映X-Requested-With HTTP标头的存在。 这个标题实际上是否已发送到服务器? 正如詹姆斯建议的那样,尝试用Fiddler或类似的代理服务器替代品来描述这一点。

嗯……我道歉。 我不知道发生了什么变化,但现在IsAjaxRequest正在返回true。 我比较了上面发布的代码和现在正在执行的代码,我看到没有区别。 我之前反复弄错了,现在我反复得到了真相。 当然我错过了一些东西,但我没有看到它。

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

CreateItem是否执行重定向? 请参阅Firefox在Ajax请求重定向期间不保留自定义标头:ASP.NET MVC解决方案