让我首先说明我尝试过的所有可能的解决方案。我现在jquery-unobtrusive- ajax.min.js在脚本文件夹中,并将其添加到捆绑包中。我尝试在视图页面以及_Layout.cshtml页面上同时引用它,这就是我目前拥有捆绑软件的方式:
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。是什么赋予了???请帮助…我已经用尽了所有我可能想到的想法,调整和解决方法。我什至尝试清除缓存,清理解决方案等。
Request.IsAjaxRequest()
所以…问题是jquery-unobtrusive- ajax.min.js引用了不推荐使用的jQuery方法.live()。在调试时,我能够将其视为chrome开发人员控制台中抛出的错误。仅当您使用1.9以后的jQuery版本(我使用的是1.10.2)时,才会发生这种情况。在1.7中已弃用,但在1.9中已将其完全删除。
.live()
解决方案是添加另一个jquery- migrate-1.2.1.js可以在以下位置找到的jquery库:https : //github.com/jquery/jquery- migrate#readme,更具体地说(出于开发目的,而非生产目的)位于:http://code.jquery .com / jquery- migrate-1.2.1.js。我保存了该库并将其包含在BundleConfig.cs脚本中,其余的按预期开始工作。我希望这会帮助其他人。
jquery- migrate-1.2.1.js
BundleConfig.cs