让我先解释一下我尝试过的所有可能的解决方案.我现在在我的脚本文件夹中有jquery-unobtrusive-ajax.min.js并将它添加到一个包中.我已尝试在视图页面本身上引用它,同时还有_Layout.cshtml页面,这就是我目前拥有该包的方式:
//BundleConfig.cs bundles.Add(new ScriptBundle("~/bundles/jquery").Include( "~/Scripts/jquery-1.10.2.min.js","~/Scripts/modernizr-2.6.2.js","~/Scripts/jquery.validate.min.js","~/Scripts/jquery.unobtrusive-ajax.min.js"));
在主布局视图页面中引用此包,我的所有其他视图都派生自:
//_Layout.cshtml (at bottom of view,right before hitting </body></html>) @Scripts.Render("~/bundles/jquery")
最后在web.config中,我已将这些键添加到应用程序设置中:
//Web.config <appSettings> <add key="ClientValidationEnabled" value="true" /> <add key="UnobtrusiveJavaScriptEnabled" value="true" /> </appSettings>
现在已经说明了,这就是我的Ajax调用的样子.我试图从一个独立页面返回一些数据并将其替换为主页面中的内容,我认为相当简单:
@Ajax.ActionLink("Edit","Index","WeeklyTarget",new {id = item.WeeklyTargetId},new AjaxOptions {HttpMethod = "GET",UpdateTargetId = "hoursEdit",InsertionMode = InsertionMode.Replace})
public ActionResult Index(int? id,IEnumerable<WeeklyTarget> selection ) { if (Request.IsAjaxRequest()) { // return the partial view here } }
但正如我的标题所述,Request.IsAjaxRequest()仍将始终返回false.是什么赋予了???请帮忙……我已经筋疲力尽了所有的想法,调整和解决方法.我甚至尝试清理我的缓存,清洁解决方案等.
解决方法
所以……问题是jquery-unobtrusive-ajax.min.js引用了已弃用的jQuery方法.live().我能够看到这是因为我正在调试时在chrome的开发者控制台中抛出的错误.只有在使用1.9版本的jQuery版本时才会发生这种情况(我使用的是1.10.2).它在1.7中被弃用,但在1.9中被完全删除.
解决方案是添加另一个jquery库jquery-migrate-1.2.1.js,可以在这里找到:https://github.com/jquery/jquery-migrate#readme以及更具体(用于开发,而不是生产目的):http://code.jquery.com/jquery-migrate-1.2.1.js.我保存并将此库包含在我的BundleConfig中. cs脚本,其余的开始按预期工作.我希望这会有助于其他人.