提交具有非顺序索引/位置的列表/集合

时间:2019-04-09 08:21:18

标签: c# asp.net

我有一个包含列表的视图模型,例如:

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本身的文章,但是我可以从中推断出一些矛盾之处,或者可能是我对它们的理解不正确。

Skipping Not possible

Skipping possible

我不善于解释问题。因此,请告诉我是否可以添加任何内容以使其更具描述性。
谢谢。 示例删除代码: Fiddle for delete Js code

1 个答案:

答案 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后缀的隐藏输入。当绑定到列表时,这将为模型绑定器提供一个不错的索引集合。