【发布时间】: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