缺少元素时的MVC / Razor模型绑定集合

时间:2011-09-13 09:15:47

标签: asp.net-mvc razor collections model-binding

我有一个包含可变长度文本框列表的表单,使用类似于此的模板呈现..

 @Html.TextBox("items[" + itemIndex + "].Title", someValue)

所以最终呈现的HTML看起来像这样......

<input id="items_0__Amount" type="text" value="Apple" name="items[0].Title">
<input id="items_1__Amount" type="text" value="Banana" name="items[1].Title">
<input id="items_2__Amount" type="text" value="Orange" name="items[2].Title">

在表单提交上,这很好地绑定到我的模型。但是,我有一个删除按钮,使用Javascript从表单中删除一行或多行。问题是,如果删除说中间行,HTML就像这样...

<input id="items_0__Amount" type="text" value="Apple" name="items[0].Title">
<input id="items_2__Amount" type="text" value="Orange" name="items[2].Title">

...并且索引不再是连续的。这似乎混淆了MVC和我的模型绑定器只传递了第一行,而不是最后一行。我做错了什么,或者如果列表中的索引不连续,MVC是否会失败?这个问题的最佳解决方案是什么?

我希望尽可能避免使用JS重新索引所有内容。

谢谢!

1 个答案:

答案 0 :(得分:5)

很久以前,菲尔·哈克(Phil Haack)发表了类似于此的博客,虽然我不确定它是否仍然与MVC 3相关。该帖子包含了非顺序索引问题的解决方法 -

http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx