2013-03-17 93 views
13

我在我的MVC控制器下面的代碼:我的視圖頂部渲染一個簡單的ASP.NET MVC PartialView使用JQuery的Ajax調用後

[HttpPost] 
public PartialViewResult GetPartialDiv(int id /* drop down value */) 
{ 
    PartyInvites.Models.GuestResponse guestResponse = new PartyInvites.Models.GuestResponse(); 
    guestResponse.Name = "this was generated from this ddl id:"; 

    return PartialView("MyPartialView", guestResponse); 
} 

那麼這在我的javascript:

$(document).ready(function() { 

$(".SelectedCustomer").change(function (event) { 
    $.ajax({ 
     url: "@Url.Action("GetPartialDiv/")" + $(this).val(), 
     data: { id : $(this).val() /* add other additional parameters */ }, 
     cache: false, 
     type: "POST", 
     dataType: "html", 
     success: function (data, textStatus, XMLHttpRequest) { 
      SetData(data); 
     } 
    }); 

}); 

    function SetData(data) 
    { 
     $("#divPartialView").html(data); // HTML DOM replace 
    } 
}); 

後來終於我的html:

<div id="divPartialView"> 

    @Html.Partial("~/Views/MyPartialView.cshtml", Model) 

</div> 

本質上講,當一個我的下拉標籤(其中有一個叫SelectedCustomer類)有onchange開了它應該發射崗位電話。其中它,我可以調試到我的控制器,它甚至可以追溯到成功傳回PartialViewResult但隨後成功的SetData()函數犯規被調用,而是我得到一個500內部服務器錯誤如下谷歌鉻合金控制檯上:

POST http:// localhost:45108/Home/GetPartialDiv/1 500(內部服務器 錯誤)jquery-1.9.1.min.js:5 b.ajaxTransport.send jquery-1.9.1.min.js :5 b.extend.ajax的jquery-1.9.1.min.js:5(匿名 功能)5:25 b.event.dispatch的jquery-1.9.1.min.js:3 b.event.add.v .handle的jquery-1.9.1.min.js:3

任何想法我做錯了什麼?我已經把這個一個人殺了!

回答

18

此行是不正確的:url: "@Url.Action("GetPartialDiv/")" + $(this).val(),

$.ajaxdata屬性已經包含路由值。所以只需在url屬性中定義url即可。在data屬性中寫入路由值。

$(".SelectedCustomer").change(function (event) { 
    $.ajax({ 
     url: '@Url.Action("GetPartialDiv", "Home")', 
     data: { id : $(this).val() /* add other additional parameters */ }, 
     cache: false, 
     type: "POST", 
     dataType: "html", 
     success: function (data, textStatus, XMLHttpRequest) { 
      SetData(data); 
     } 
    }); 
}); 
+0

不錯的地方,只是意識到它沒有意義我這樣做,並將它作爲查詢字符串/路由值傳遞。但我認爲我發現問題是我的分部觀點,我不得不改變它是返回PartialView(「MyPartialView」,guestResponse); – User101 2013-03-17 21:52:48

+0

我的意思是返回PartialView(「〜/ Views/MyPartialView.cshtml」,guestResponse);相反,這很奇怪,因爲它應該只是不工作? – User101 2013-03-17 21:53:09

+0

你必須完全指定的觀點是,究其原因是因爲你沒有把它放在默認的位置之一,即〜/查看/ WhateverTheControllerNameIs/MyPartialView.cshtml或〜/查看/共享/ MyPartialView.cshtml – StanK 2013-03-18 01:03:55