Asp.net mvc 如何绑定到ASP.NET MVC中的特定数组元素?

Asp.net mvc 如何绑定到ASP.NET MVC中的特定数组元素?,asp.net-mvc,data-binding,Asp.net Mvc,Data Binding,我正在使用ASP.NET MVC RC1并尝试将文本框绑定到对象属性,如下所示: <%= Html.TextBox("Comments.Contacts[0].ContactName") %> 它似乎应该起作用,因为它确实: <%= ((MuralProject)ViewData.Model).Comments.Contacts[0].ContactName %> 但是遗憾的是,文本框中的结果是一个空字符串。我做错了什么吗?文本框扩展方法的第一个参数设置最终创

我正在使用ASP.NET MVC RC1并尝试将文本框绑定到对象属性,如下所示:

<%= Html.TextBox("Comments.Contacts[0].ContactName") %>

它似乎应该起作用,因为它确实:

<%= ((MuralProject)ViewData.Model).Comments.Contacts[0].ContactName %>


但是遗憾的是,文本框中的结果是一个空字符串。我做错了什么吗?

文本框扩展方法的第一个参数设置最终创建的输入元素的名称,并尝试根据该参数从ViewData/Model(对于使用TypeDescriptor/reflection的模型)获取条目

它这样做的方式只是在点处拆分输入字符串,然后通过反射检查ViewDataDictionary中的特定键和模型,因此在您给出的情况下,它将尝试查找联系人[0],而不是联系人,并且不会拾取您的属性

要解决这个问题,您只需要提供对象的实际值,例如

Html.TextBox("Comments.Contacts[0].ContactName", 
             Model.Comments.Contacts[0].ContactName)

如果查看MVC源代码并查看ViewDataDictionary类,您可以自己看到这一点。

很有趣。如果没有数组,它似乎可以使用单个参数。谢谢。更新了为什么它不能与数组一起工作的原因,基本上它是试图找到名为Contacts[0]的属性,而不是Contacts并放弃