我有一个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为真?
4 回答
Request.IsAjaxRequest
属性应该反映X-Requested-With
HTTP标头的存在 . 这个 Headers 实际上是否已发送到服务器?正如詹姆斯建议的那样,尝试使用Fiddler或类似的代理服务器替代方案进行分析 .嗯......我道歉 . 我不知道发生了什么变化,但现在IsAjaxRequest正在返回true . 我比较了上面发布的代码和现在正在执行的代码,我看到没有区别 . 我之前反复弄错了,现在我反复得到了真相 . 当然我错过了一些东西,但我没有看到它 .
我不确定区别是什么,但是确定是否存在差异的可能方法是使用像Fiddler(www.fiddlertool.com)这样的HTTP分析工具,并查找两个调用之间可能存在的差异 .
CreateItem是否执行重定向?见Firefox does not preserve custom headers during Ajax request redirect: an ASP.NET MVC solution