2011-12-21 115 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方法,你可以动态地做你想做的事情。