我有一个包含列表的视图模型,例如:
class School
{
public List<Student> Students { get; set; }
}
class Student
{
public int Id { get; set; }
public String Name { get; set; }
}
我有一个表格,用于提交与一所学校有关的多个学生信息。现在,我可以从表单中添加/删除一个学生。
添加工作正常,但是我的问题和我的问题与删除学生有关。
所以让我用一个例子来解释一下:
假设我添加了3个学生,然后以这种方式将名称和ID绑定到模型:
Students[0].Id = "1"
Students[0].Name = "Student A"
Students[1].Id = "2"
Students[1].Name = "Student B"
Students[2].Id = "3"
Students[2].Name = "Student C"
如果我保存它,就可以了。但是可以说我删除了学生 id =“ 2”。提交事件时,只有id =“ 1”的学生 被绑定并在删除索引(即id =“ 3”的学生)未被绑定后休息。
我的问题是:删除id =“ 2”之后,是否完全有可能绑定id =“ 3”? 或者用适当的术语,可以绑定/提交带有跳过索引的列表。
我发现以下提到的有关stackoverflow本身的文章,但是我可以从中推断出一些矛盾之处,或者可能是我对它们的理解不正确。
我不善于解释问题。因此,请告诉我是否可以添加任何内容以使其更具描述性。
谢谢。
示例删除代码:
Fiddle for delete Js code
答案 0 :(得分:0)
我将这个答案发布给其他有同样疑问的人。
因此,如果您有这样的收藏夹:
public class Book {
public string Title { get; set; }
public string Author { get; set; }
public DateTime DatePublished { get; set; }
}
//Action method on HomeController
public ActionResult UpdateProducts(ICollection<Book> books) {
return View(books);
}
添加三本书后,您的表单如下所示:
<form method="post" action="/Home/Create">
<input type="text" name="[0].Title" value="Curious George" />
<input type="text" name="[0].Author" value="H.A. Rey" />
<input type="text" name="[0].DatePublished" value="2/23/1973" />
<input type="text" name="[1].Title" value="Code Complete" />
<input type="text" name="[1].Author" value="Steve McConnell" />
<input type="text" name="[1].DatePublished" value="6/9/2004" />
<input type="text" name="[2].Title" value="The Two Towers" />
<input type="text" name="[2].Author" value="JRR Tolkien" />
<input type="text" name="[2].DatePublished" value="6/1/2005" />
<input type="submit" />
</form>
现在,如果您要添加删除功能,以便您的表单可能包含非顺序条目,则可以执行以下操作:
<form method="post" action="/Home/Create">
<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" />
<input type="hidden" name="products.Index" value="caliente" />
<input type="text" name="products[caliente].Name" value="Salsa" />
<input type="text" name="products[caliente].Price" value="1.23" />
<input type="submit" />
</form>
在上面的示例中,我们为需要绑定到列表的每个项目提供了一个带有.Index后缀的隐藏输入。当绑定到列表时,这将为模型绑定器提供一个不错的索引集合。