3 Stimmen

Wie man verschachtelte Array-Element-Eigenschaftswert zu TextBox in ASP.NET MVC binden

Ich habe ein Modell

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

Und ich möchte Benutzeradressen als Liste anzeigen. Ich tue dies in Ansicht Seite

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

Und die Daten in den Textfeldern, die in der for-Anweisung ausgefüllt werden, sind leer. Ofcourse ich könnte nächsten Parameter TextBox-Methode hinzufügen, um Wert zuweisen, aber zwei Textboxen oben (zum Beispiel "user.Name") korrekt lesen/setzen Wert.

Was mache ich falsch?

PS. Ich verwende MVC RTM 1.0

1voto

Rony Punkte 9033

Die Methode Html.TextBox benötigt den Namen des Steuerelements und den Wert des Steuerelements

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

Sie können auch versuchen, die Methode Html.TextBoxFor im MVC Futures-Projekt zu verwenden

0voto

Mark Punkte 6051

In Ihrem Beispiel setzen Sie nur die Attribute "name" und "id" der Texbox und nicht das Wertobjekt als zweite Überladung.

Versuchen Sie dies:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X