为什么Ajax.ActionLink更新整个页面而不仅仅是UpdateTarget

时间:2014-03-24 17:22:42

标签: jquery asp.net-mvc asp.net-mvc-5

这应该只替换UpdateTarget,但它没有,它取代了整个页面,我不明白为什么。正在返回正确的局部视图,但它不是替换目标ID,而是替换整个页面。

<div id="magHeader">
        <p>this is a test.</p>
        @Ajax.ActionLink("Edit", "GetEditor", "Home", new AjaxOptions(){ UpdateTargetId = "magHeader", InsertionMode = InsertionMode.Replace})
</div>

在运行时,链接如下所示:

<a href="/Home/GetEditor" data-ajax-update="#magHeader" data-ajax-mode="replace" data-ajax="true">Edit</a>

我做错了吗?在过去成功完成了这项工作,没有任何问题。

修改 此问题的根本原因是在VS 2012中,您只需要添加对JQueryVal包的引用以使其工作。但是,在2013年,BundleConfig.cs被更改,因此JQueryVal包不再包含JQuery.Unobtrusive。所以简单的解决方法是将它添加回包中:

bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                    "~/Scripts/jquery.unobtrusive*",
                    "~/Scripts/jquery.validate*"));

然后一切都会按预期工作。

3 个答案:

答案 0 :(得分:11)

检查您是否在某处或之前将@Scripts.Render("~/bundles/jqueryval")加载到您的页面中。这可能是因为不显眼的javascript文件没有被加载。请检查此video

编辑:
请检查您的packages.config文件中是否安装了软件包。

<package id="Microsoft.jQuery.Unobtrusive.Ajax" version="3.1.1" targetFramework="net451" />
  <package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.0.0" targetFramework="net451" />

答案 1 :(得分:3)

这是因为主要布局或子视图中不包含 jquery 脚本文件和 jquery unobtrusive ajax 的主要原因,我担心你是缺少它们,在视图中包含jquery,jquery不显眼的ajax文件,它将像魅力一样工作。

答案 2 :(得分:1)

添加以下脚本文件参考。

UIControlEventEditingChanged