2014-03-14 71 views
1

我正在使用(ASP.Net MVC4),並且我被困在如何從部分視圖中獲取信息。 我的意思是我有我的視圖模型從PartialView獲取數據MVC4

public class ShowHomeViewModel 
{ 
    public int ID_ClientTypeID { get; set; } 
    public string ReservationDate { get; set; } 
    public short ClientNum { get; set; } 
      public string ClientPhone { get; set; } 

    public List<HomeViewModel> ReservedHuts { get; set; } 
} 

我有哪裏我顯示從HomeViewModel所有德數據的局部視圖,它展現的偉大,問題是當我嘗試從視圖中恢復ReservedHuts名單:

@model HutReservation.ViewModel.ShowHomeViewModel 
    <table> 
     <tr> 
      @{Html.RenderPartial("_Reservations", Model.ReservedHuts);} 
     </tr> 
    </table> 

在我看來,我顯示列表,並更改了一些數據,但是當我按一下按鈕,轉到新方法波紋管,原來,ReservedHuts(HomeViewModel的列表)爲空

[HttpPost] //cambiar la pagina para el partial view 
    public ActionResult New(ShowHomeViewModel vm) // <- this vm is null 
    { 

     foreach (HomeViewModel hvm in vm.ReservedHuts) 
     { 

     } 
     return View("ConfirmNew", vm); 
    } 

我真的被困在這裏,感謝您的幫助提前

+0

你PartialView需要被正被調回形式內再現。是這樣嗎?發佈一些呈現的HTML。 – ps2goat

+0

如果你想異步返回到服務器以達到你的'New'方法,你將不得不使用AJAX – Jonesopolis

+1

向我們展示你的部分視圖...在那裏,我們應該看看你在做什麼你的名單,如果你的表格還行。 – Romias

回答

0

這裏的問題是,您的表單數據不能綁定到ShowHomeViewModel。這是因爲在渲染局部時(模型上下文已從ShowHomeViewModel更改爲HomeViewModel),模型的上下文已更改。 MVC默認使用約定來綁定屬性(如果您願意,您可以創建自己的模型綁定器,它使用任何想要綁定的方法)。在默認情況下,當您爲模型創建一個EditorFor屬性時,MVC將命名適當的表單域,以便它可以綁定回創建它的模型上下文。

所以,如果你跳過的部分,你可以只運行在父視圖您的foreach,你很可能仍然綁定到ShowHomeViewModel因爲它將命名錶單字段是這樣的:

<input name="ReservedHuts_HutId"> 

但是,如果您使用的部分,並更改模型方面,將呈現這樣相同的輸入:

<input name="HutId"> 

因此,MVC不能(默認)綁定的HutIdShowHomeViewModel價值,因爲沒有物業叫HutId(但對HomeViewModel HutId屬性,所以它會成功綁定!)

+0

我環顧四周,尋找更深入的文章。這個很不錯:http://www.codeproject.com/Articles/551576/ASP-NET-MVC-Model-Binding-and-Data-Annotation – solidau