ASP.NET MVC Modelbinder和具有不规则索引的数组

时间:2011-05-10 09:16:25

标签: asp.net asp.net-mvc asp.net-mvc-3

我有一个EditorFor模板,它绑定到一个列表并创建带有name属性的html元素,这些元素表示数组中的元素,例如。

<input id="Contacts_0__Uid" name="Contacts[0].Uid" type="hidden"
 value="sdfsdfs6-f1a1-44e4-af30-9cfb00a8d654">
 <input id="Contacts_1__Uid" name="Contacts[1].Uid" type="hidden"
 value="f9826696-f1a1-44e4-af30-9cfb00a8d654">
 <input id="Contacts_2__Uid" name="Contacts[2].Uid" type="hidden"
 value="23423skf-f1a1-44e4-af30-9cfb00a8d654">

我有一段javascript从表中删除一行。结果是当表单发布到服务器时,列表的数组索引不同步,例如:

<input id="Contacts_1__Uid" name="Contacts[1].Uid" type="hidden" value="f9826696-f1a1-44e4-af30-9cfb00a8d654">
<input id="Contacts_3__Uid" name="Contacts[2].Uid" type="hidden" value="23423skf-f1a1-44e4-af30-9cfb00a8d654">

没有元素索引0.当索引不同步时,模型绑定器似乎忽略了这个列表。

我知道我可能会写一些javascript来更改名称属性,但我想知道在服务器上是否有这种方法?

1 个答案:

答案 0 :(得分:0)

答案很晚,但它可以帮助其他人。

不要使用javascript删除DOM元素(行)。相反,将它们标记为使用自定义属性删除,例如&#34; destroy&#34;从视图中隐藏。这样,它们将被提交回服务器,您的阵列将保持不变。

然后,在服务器端,你可以评估整个数组,检查所有元素&#34; destroy&#34;属性并在持久化对象图之前执行实际的删除逻辑。