Request.IsAjaxRequest()总是在MVC4中返回false,尝试了SO中的所有建议等

让我先解释一下我尝试过的所有可能的解决方案。 我现在在我的脚本文件夹中有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 ) @Scripts.Render("~/bundles/jquery") 

最后在web.config中,我已将这些键添加到应用程序设置中:

 //Web.config     

现在已经说明了,这就是我的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 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脚本中,其余的按照预期开始工作。 我希望这会有助于其他人。

当你错过了jjery.unobtrusive-ajax.min.js时,ajax请求与miscrosoft辅助方法没有完全同步的问题,如IsAjaxRequest(),你可以安装它:1。打开nuget数据包管理器2.运行命令Install-Package Microsoft。 jQuery.Unobtrusive.Ajax

原始信息可以在这里找到: https : //www.devexpress.com/Support/Center/Question/Details/Q508048

祝你今年夏天太阳光

如果使用AngularJs和$ resource,您可能需要添加它

 myAppModule.config(['$httpProvider', function($httpProvider) { $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; }]); 

看到这个链接