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

5cg8jx4n  于 2022-11-22  发布在  jQuery
关注(0)|答案(3)|浏览(167)

让 我 从 解释 我 尝试 过 的 所有 可能 的 解决 方案 开始 。 我 现在 在 我 的 脚本 文件 夹 中 有 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 。 为什么 ? ? ? 请 帮助 ... 我 已经 用尽 了 所有 的 想法 , 调整 , 和 工作 区 , 我 可能 会 想到 的 。 我 甚至 尝试 清除 我 的 缓存 , 清理 解决 方案 , 等等 。

ia2d9nvy

ia2d9nvy1#

所以......问题是jquery-unobtrusive-ajax.min.js引用了jQuery方法.live()。当我调试时,chrome的开发者控制台抛出了一个错误。只有当你使用jQuery 1.9以后的版本时才会发生这种情况(我使用的是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脚本中,其余的部分开始按预期工作。我希望这将对其他人有所帮助。

vatpfxk5

vatpfxk52#

问题是 AJAX 请求不能与miscrosoft helper方法完全同步,比如IsAjaxRequest()。当你在你的库中缺少- jquery.unobtrusive-ajax.min.js时,就会出现这种情况。你可以安装它:
1.开放式Nuget数据包管理器
1.运行命令安装包Microsoft.jQuery.Unobtrusive. AJAX
原始信息可以在这里找到:https://www.devexpress.com/Support/Center/Question/Details/Q508048
祝你这个夏天阳光充足

sh7euo9m

sh7euo9m3#

如果使用AngularJs和$resource,则可能需要添加以下内容

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

请参阅this link

相关问题