2011-10-19 84 views
1

我正在使用Asp.Net MVC 2,並且我正在創建一個創建/編輯表單的類,它的某些屬性是集合。用戶可以爲每個集合添加N個項目。我的ViewModel是這樣的:Asp.Net MVC 2與註冊表對象的註冊表格

public class Person 
{ 
    public string Name {get; set;} 
    public DateTime BirthDate {get; set;}  
    public IList<Address> Addresses {get; set;} 
} 

public class Address 
{ 
    public string StreetName {get; set} 
    public int Number {get; set;} 
    public string Neighborhood {get; set;} 
} 

這是一個要求用戶只需點擊一次提交按鈕,即只有一種形式。所以我試圖使用Steven Sanderson在這裏顯示的解決方案http://blog.stevensanderson.com/2010/07/12/editing-a-variable-length-list-knockout-style/,但它要求我的視圖繼承IEnumerable。在我的場景中,我有一個擁有多個地址和多個電話的人,等等,而不是一個集合。

我可以使用JQuery添加表單元素,但我不知道如何在控制器上進行數據綁定。

任何人都可以幫助我嗎?

非常感謝!

回答

1

菲爾哈克對此類情形的偉大的職位:

http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

有是這篇文章中的各種例子。

<% for (int i = 0; i < 3; i++) { %> 

    <%: Html.TextBoxFor(m => m.Addresses[i].StreetName) %> 
    <%: Html.TextBoxFor(m => m.Addresses[i].Number) %> 
    <%: Html.TextBoxFor(m => m.Addresses[i].Neighborhood) %> 

<% } %> 

對於增加值通過javascript,你只需要保持命名約定:

<input type="text" name="Addresses[0].StreetName" /> 
<input type="text" name="Addresses[0].Number" /> 
<input type="text" name="Addresses[0].Neighborhood" /> 

<input type="text" name="Addresses[1].StreetName" /> 
<input type="text" name="Addresses[1].Number" /> 
<input type="text" name="Addresses[1].Neighborhood" /> 

附:不知道名字。檢查第一個樣本將如何生成。

2

閱讀本文Phill Haack在Model Binding To A List上閱讀。

在這裏,他證明了正是你問什麼,定義集合中的每個項目爲:

<input type="hidden" name="products.Index" value="cold" /> 
    <input type="text" name="products[cold].Name" value="Beer" /> 
    <input type="text" name="products[cold].Price" value="7.32" /> 

    <input type="hidden" name="products.Index" value="123" /> 
    <input type="text" name="products[123].Name" value="Chips" /> 
    <input type="text" name="products[123].Price" value="2.23" /> 
0

Samich和Jamie的答案是正確的,並且可以工作,但可能有點笨拙。我會推薦Steve Sanderson's Collections擴展,允許更加動態的編輯收藏。