2016-03-30 113 views
0

我一直在試圖弄清楚這是如何工作的,或者並非如此。使用Ajax MVC返回部分視圖5

我有一個Ajax調用我的HomeController:

function addPerson() { 

    $.ajax({ 
     dataType: "html", 
     url: '@Url.Action("AddPerson")', 
     success: function (data) { 
      $('#Detail').hide(); 
      $('#Detail').html(data); 
     }, 
     error: function() { 
      $('#Detail').html("<h3>Couldn't do that</h3>"); 
     } 
    } 
    ); 

有了這個ActionResult的在我的HomeController:

public ActionResult AddPerson() 
    { 
     return PartialView("_AddPerson"); 
    } 

_AddPerson.cshtml是我的意見/共享文件夾作爲任何局部視圖會。

我想要做的就是在部分視圖中將html附加到我的主視圖中的div。 Intelisense啓動AddPerson操作,但是當我運行它時,我在Chrome中調用該函數時出現此錯誤:

「加載資源失敗:服務器響應狀態爲404(未找到)http://localhost:45003/Home/AddPerson

我實際上得到了這個調用以前唯一的區別是我傳遞數據到控制器做一些事情,而不僅僅是返回部分視圖。我做錯了什麼或者我試圖達到甚至不可能實現的功能?

編輯:我RouteConfig如果它的事項:

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
+0

我通常不會將字符串傳遞給View()或PartialView(),因爲我更喜歡ViewEngine找出視圖的名稱。你的情況你有一個名爲'_Addperson.cshtml'的視圖? –

+0

是的,我喜歡。它位於Shared文件夾而不是Home文件夾中,但在我的工作調用中,這不是問題,所以我真的不知道如何導致它。 Ajax調用失敗並且默認爲錯誤函數,ActionResult從不調用。我不知道爲什麼我的生活。 – StolenSheep

+0

所以,你的'AddPerson()'方法在'HomeController'上,並且你還沒有編輯默認路由表,並且你沒有任何授權? –

回答

0

萬一有人發現了這一點,並遇到了類似的問題我的,我解決它通過創建一個新的項目,並把完全相同的代碼到它。 IT按預期工作。

我不知道是什麼原因造成了原始項目中的錯誤,但它可能有助於解決您的問題。

0

使用AJAX調用,您可以用它的方式如下:

$('#Detail').load(
     '<%= Url.Action("AddPerson", "Home") %>' 
); 
1

它應該工作就像一個魅力。檢查從@Url.Action("AddPerson")生成的網址。您確定自己與定義AddPerson的控制器處於相同的路線嗎?您可能需要將控制器參數添加到Url.Action甚至區域名稱。

url: '@Url.Action("AddPerson", "controllerName"' 

url: '@Url.Action("AddPerson", "controllerName", new { area = "areaName" })' 
+0

我試過但都無濟於事。這是我的RouteConfig: 'public static void RegisterRoutes(RouteCollection routes){routes.IgnoreRoute(「{resource} .axd/{* pathInfo}」); routes.MapRoute(name:「Default」,url:「{controller}/{action}/{id}」,默認值:new {controller =「Home」,action =「Index」,id = UrlParameter.Optional}); }' AddPerson肯定是在HomeController中,所以我有點失落,因爲什麼是錯的。 – StolenSheep

+0

@ user2966419你沒有用任何屬性來裝飾AddPerson嗎?像「HttpPost」一樣? –

+0

@ user2966419請不要通過評論更新您的問題,點擊編輯上的問題添加相關信息。 –