我正在使用Asp.net MVC3并尝试向服务器发送一个简单的Ajax帖子,该服务器返回部分视图并在搜索期间更新我的项目列表。
@using (Ajax.BeginForm("PartialUpdate", "Listing"
, new AjaxOptions {
UpdateTargetId = "ListPartialDiv",
HttpMethod = "GET",
InsertionMode = InsertionMode.Replace,
}))
{
<!-- Search Boxes and buttons here -->
}
<div id = "ListPartialDiv">
@{
Html.RenderPartial("_ListPartial", Model);
}
</div>
ajax成功调用服务器,服务器通过发送部分视图进行响应。但是局部视图总是在新页面中呈现。我发现这是因为它不知道它是一个ajax调用,所以它呈现一个新的页面。我已经包含了正确的jquery-ubobtrusive-ajax.min.js脚本,并根据This Question
添加了以下密钥 <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")" type="text/javascript">
我的控制器代码非常简单:
if (Request.IsAjaxRequest())
return PartialView("_ListPartial", list);
return View("Index", list);
但是,无论如何,Request.IsAjaxRequest()总是返回false。 我也根据This Question使用了小提琴手和萤火虫,并没有看到X-Requested-With标题,但我无法弄清楚这意味着什么或如何改变它。我唯一能想到的是,我看到的每个其他示例都使用旧版本的jquery。这与它有什么关系吗?谢谢你的帮助。
答案 0 :(得分:7)
你在jQuery之前加入了不显眼的AJAX脚本,所以你的脚本都没有工作。
答案 1 :(得分:1)
var controllerContext = MockRepository.GenerateMock<ControllerContext>();
controllerContext.Expect(c => c.HttpContext.Request["X-Requested-With"]).Return("XMLHttpRequest");
controller.ControllerContext = controllerContext;
答案 2 :(得分:0)
确保在其他jquery脚本文件之后引用jquery.unobtrusive.ajax.js / jquery.unobtrusive.ajax.min.js脚本文件,同时确保每页不多次引用该文件并且你应该排序
答案 3 :(得分:0)
你需要像这样在jquery脚本之后添加不显眼的脚本。
bundles.Add(new ScriptBundle("~/bundles/searchDemo").Include(
"~/Scripts/jquery-{version}.js",
"~/Scripts/jquery-ui-{version}.js",
"~/Scripts/jquery.unobtrusive*",
"~/Scripts/jquery.validate*"));
答案 4 :(得分:0)
我偶然发现IsAjaxRequest()无效的类似情况。 我确保包括微软不显眼的包。它仍然没有帮助。 刚刚从包管理器升级到最新版本的不显眼的库,它工作正常!