English 中文(简体)
如何将嵌套数组元素属性值绑定到ASP.NET MVC中的TextBox
原标题:
  • 时间:2009-03-25 09:52:34
  •  标签:

我有一个模型。

public class User 
{
    public User()
    {
       Addreses = new List<Address>();
    }
    public String Name { get; set; }
    public String LastName { get; set; }
    public List<Address> Addresses { get; private set; }
}

public class Address
{
    public String Street { get; set; }
    public String City { get; set; }
}

我想以ul列表的形式显示用户地址。我在视图页面中完成这个操作。

    using (Html.BeginForm("UpdateUser", "Home", FormMethod.Post))
    {
%>
<% =Html.TextBox("user.Name")%><br />
<% =Html.TextBox("user.LastName")%><br />
<ul>
    <% 
       for (Int32 index = 0; index < ((User)ViewData["user"]).Addresses.Count; index++)
       {%>
    <li>
        <% =Html.TextBox("user.Addresses[" + index + "].Street")%>,
        <% =Html.TextBox("user.Addresses[" + index + "].PostalCode")%>,
        <% =Html.TextBox("user.Addresses[" + index + "].City")%>
    </li>
    <% 
       }
    %>
</ul>
<input type="submit" value="Submit" />
<% }%>

文本框中填充的数据在for语句中为空。当然,我可以添加下一个参数TextBox方法来分配值,但是两个文本框上面(例如"user.Name")正确读取/设置值。

我做错了什么?

附注:我正在使用MVC RTM 1.0。

问题回答

Html.TextBox方法需要控件名称和控件值。

<ul>
    <%foreach (var address in ((User)ViewData["user"]).Addresses){ 
        <li>
            <% =Html.TextBox("Street", address.Street)%>,
            <% =Html.TextBox("PostalCode", address.PostalCode)%>,
            <% =Html.TextBox("City", address.City)%>
        </li>
    <%}%>
</ul>

您也可以尝试在MVC Futures项目中使用Html.TextBoxFor方法。

在您的示例中,您只设置了文本框的“名称”和“ID”属性,而没有设置值对象作为第二个重载。

尝试这个:

<% =Html.TextBox("user.Addresses[" + index + "].Street", user.Addresses[index].Street)%>        




相关问题
热门标签