小编典典

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

ajax

让我首先说明我尝试过的所有可能的解决方案。我现在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。是什么赋予了???请帮助…我已经用尽了所有我可能想到的想法,调整和解决方法。我什至尝试清除缓存,清理解决方案等。


阅读 161

收藏
2020-07-26

共1个答案

小编典典

所以…问题是jquery-unobtrusive- ajax.min.js引用了不推荐使用的jQuery方法.live()。在调试时,我能够将其视为chrome开发人员控制台中抛出的错误。仅当您使用1.9以后的jQuery版本(我使用的是1.10.2)时,才会发生这种情况。在1.7中已弃用,但在1.9中已将其完全删除。

解决方案是添加另一个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脚本中,其余的按预期开始工作。我希望这会帮助其他人。

2020-07-26