2009-03-25 7 views
3

Je modèleComment lier la valeur de la propriété imbriqué élément de tableau à TextBox dans ASP.NET MVC

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; } 
} 

Et je veux faire les adresses des utilisateurs d'affichage liste ul. Je fais ceci dans la vue page

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" /> 
<% }%> 

Et les données dans les zones de texte remplies pour l'instruction sont vides. Bien sûr, je pourrais ajouter la méthode TextBox du paramètre suivant pour assigner une valeur, mais deux zones de texte supérieures (par exemple "user.Name") lisent/définissent correctement la valeur.

Qu'est-ce que je fais mal?

PS. J'utilise MVC RTM 1.0

+0

Étant donné que le bot de la communauté SO a propulsé cela vers le haut, pouvez-vous confirmer si ce problème persiste ou non? –

Répondre

0

Dans votre exemple, vous définissez uniquement les attributs "nom" et "id" de la boîte texbox et non l'objet valeur comme deuxième surcharge.

essayez ceci:

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

Oui, mais <% = Html.TextBox ("user.Name")%> a lu correctement la valeur de ViewData. Et je ne sais pas pourquoi faire la même chose avec les listes nécessite une valeur de réglage manuelle. – zielu1

1

La méthode Html.TextBox besoin le nom du contrôle et la valeur du contrôle

<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> 

vous pouvez également essayer d'utiliser la méthode Html.TextBoxFor dans la Le projet MVC Futures