2011-12-21 98 views
0

列出我有一類設置這樣MVC3剃刀:添加自定義類與jQuery

public class MyCLass 
{ 
    //... 
    public IList<MyInnerClass> InnerClass { get; set;} 
} 

public class MyInnerClass 
{ 
    public string A { get; set;} 
    public string B { get; set;} 
    //.... 
} 
我CSHTML形式

我可以把它所有的頁面上,並與像

for(int i=0; i< Model.InnerClass.Count; i++) 
{ 
    @Html.EditorFor(m => m.InnerClass[i].A); 
    @Html.EditorFor(m => m.InnerClass[i].B); 
} 
後回

但現在我需要一個按鈕,它可以在現有動態下使用javascript動態添加MyInnerCLass的輸入實例,並且在發佈頁面時仍然可以正確地綁定所有內容。我將如何做到這一點? jQuery是首選,但我可以使用任何有效的工具

+0

我會使用'foreach'來遍歷你的列表,像這樣'foreach(Model.InnerClass中的var myClass)' – CAbbott 2011-12-21 22:05:25

回答

1

一種方法是將for循環的每一行包裝在某個HTML標記中,例如div或tr,以便可以用jQuery引用它。然後,您可以使用其中一個生成的行作爲模板行。索引必須替換爲適當的值。假設你有這樣的HTML輸出:

您可以用jQuery選擇第一行,然後克隆它,使用正則表達式替換索引,然後附加該行:

var newRowIndex = x; // determine row index 
var newRow = $("#rows .row").eq(0).clone(true); 
newRow.find(":input").each(function() { 
    var name = $(this).attr("name").replace(/\[\d+\]/, "[" + rowIndex.toString() + "]"); 
    var id = name.replace(/[.\]\[]/g, "_"); 
    $(this).attr("name", name); 
    $(this).attr("id", id); 
}); 
$("#rows").append(newRow); 
1

檢查出Phil Haacked的博客Model Binding To A List。他發佈了幾乎所有關於默認模型聯編程序如何與列表一起工作

只要你使用Non-Sequential Indices方法,你可以動態地做你想做的事情。