【问题标题】:Request.IsAjaxRequest() always returning false in MVC4, tried all suggestions in SO, etcRequest.IsAjaxRequest() 在 MVC4 中总是返回 false,在 SO 中尝试了所有建议等
【发布时间】:2014-03-04 15:22:15
【问题描述】:

首先让我解释一下我尝试过的所有可能的解决方案。我现在在我的脚本文件夹中有 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。是什么赋予了???请帮助...我已经用尽了所有我能想到的想法、调整和解决方法。我什至尝试清除我的缓存、清理解决方案等。

【问题讨论】:

  • 它应该可以工作。在 chrome 或您使用的任何浏览器中。检查生成的源文件,检查是否可以在生成的html中看到jquery.unobtrusive-ajax.min.js文件
  • 确实如此,但是我注意到jquery.unobtrusive-ajax.min.js 仍然引用已弃用的jQuery 方法.live(),经过进一步研究,该方法已从jQuery 1.9 中删除。也许如果我解决了这个错误,它会起作用的......嗯

标签: jquery ajax asp.net-mvc asp.net-mvc-4 razor


【解决方案1】:

所以...问题在于 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 脚本中,其余的开始按预期工作。我希望这对其他人有帮助。

【讨论】:

    【解决方案2】:

    ajax 请求无法与 miscrosoft 辅助方法完美同步的问题,例如 IsAjaxRequest() 会在您错过时出现 - jquery.unobtrusive-ajax.min.js 您可以安装它: 1.打开nuget包管理器 2.运行命令Install-Package Microsoft.jQuery.Unobtrusive.Ajax

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

    祝你今年夏天阳光充足

    【讨论】:

      【解决方案3】:

      如果使用 AngularJs 和 $resource,你可能需要添加这个

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

      this link

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-20
        • 1970-01-01
        • 2022-07-10
        • 2013-11-04
        • 2019-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多