2014-03-24 64 views
9

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

<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*")); 

然后按预期都将正常工作。

回答

11

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

编辑:
请检查你是否有package.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" /> 
+0

好的,所以我看了视频,那正是我遇到的问题。但是,它仍然没有解决。从VS 13中的新项目开始,我会按照视频中的步骤进行操作,并确保包含jqueryval。但整个页面仍被替换。在FireFox中,我可以检查脚本标签并查看jqueryval是否已加载以及jquery.validate.unobtrusive.js。所以它没有任何意义。 –

+0

你添加了这些软件包(我编辑了我的答案) – Mitul

+0

我检查了这些软件包没有安装。所以我安装了它们。但是,我仍然得到相同的结果 - 页面被替换,而不是id。 –

3

出现这种情况是因为你的的jQuery脚本文件,并jQuery的不显眼的AJAX不包括在主要布局或儿童鉴于这一主要原因,恐怕你缺少他们,包括了jQuery ,jQuery的不显眼的ajax文件在视图中,它将像魅力一样工作。

1

添加下面的脚本文件引用工作。

<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script> 
相关问题