MVC3 razor:使用jQuery将自定义类添加到列表中
我有一个这样的课程设置MVC3 razor:使用jQuery将自定义类添加到列表中,jquery,asp.net-mvc-3,razor,Jquery,Asp.net Mvc 3,Razor,我有一个这样的课程设置 public class MyCLass { //... public IList<MyInnerClass> InnerClass { get; set;} } public class MyInnerClass { public string A { get; set;} public string B { get; set;} //.... } 公共类MyCLass { //... 公共ILis
public class MyCLass
{
//...
public IList<MyInnerClass> InnerClass { get; set;}
}
public class MyInnerClass
{
public string A { get; set;}
public string B { get; set;}
//....
}
公共类MyCLass
{
//...
公共IList内部类{get;set;}
}
公共类MyInnerClass
{
公共字符串A{get;set;}
公共字符串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);
}
for(int i=0;im.InnerClass[i].A);
@EditorFor(m=>m.InnerClass[i].B);
}
但现在我需要有一个按钮,可以在现有的输入下添加一个新的
MyInnerCLass
,并使用javascript动态地将所有内容绑定回页面。我该怎么做?jQuery是首选,但我可以使用任何有效的工具查看Phil Haacked的博客。他发布了几乎所有关于默认模型绑定器如何处理列表的信息
只要您使用
非顺序索引
方法,您就可以动态地执行您想要的操作。一种方法是将for循环的每一行包装在一些HTML标记中,例如div或tr,以便jQuery可以引用它。然后,您可以使用其中一个生成的行作为模板行。必须用适当的值替换索引。假设您有以下HTML输出:
您可以使用jQuery选择第一行,然后克隆它,使用regex替换索引,然后追加该行:
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);
我会使用
foreach
来迭代列表,就像这样foreach(Model.InnerClass中的var myClass)