2014-03-24 62 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> 
相關問題