Frage

Ich habe eine benutzerdefinierte Klasse:

public class Person
{
    public String Name { get; set; }
    public Int32 Age { get; set; }
    public List<String> FavoriteFoods { get; set; }

    public Person()
    {
        this.FavoriteFoods = new List<String>();
        this.FavoriteFoods.Add("Jambalya");
    }
}

Ich gehe diese Klasse meiner stark typisierte Ansicht:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcLearner.Models.Person>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
 Create
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <h2>Create</h2>

    <% using (Html.BeginForm()) { %>
        <%= Html.LabelFor(person => person.Name) %><br />
        <%= Html.EditorFor(person => person.Name) %><br />
        <%= Html.LabelFor(person => person.Age) %><br />
        <%= Html.EditorFor(person => person.Age) %><br />
        <%= Html.LabelFor(person => person.FavoriteFoods[0]) %><br />
        <%= Html.EditorFor(person => person.FavoriteFoods[0]) %>
    <% } %>

</asp:Content>

Und wenn ich auf der Seite zu sehen, habe ich am Ende mit der Fehlermeldung auf: Vorlagen nur mit Feld und Eigenschaftenaccessor Ausdrücke verwendet werden können. Nach einem bisschen googeln, habe ich herausgefunden, dass dies geschieht, weil die EditorFor und LabelFor Funktionen nur unmittelbare Eigenschaften des Modellobjekts annehmen können, und FavoriteFoods [0] ist keine unmittelbare Eigenschaft. Hat jemand eine Arbeit, um die sich der Code Arbeit ohne Verwendung eines String würde den Namen der Steuerung angeben? Ist das überhaupt möglich? Optimal würde Ich mag einen Ausdruck aus dem Modell zu dem Elemente verwenden, die einen Editor benötigt, die auf ihrem eigenen Namen der Steuerung für den Eingang bestimmt.

ein paar mehr Dinge zu versuchen, konnte ich diese Funktion erhalten mit den folgenden Änderungen an die Ansicht:

<% using (Html.BeginForm()) { %>
    <%= Html.LabelFor(person => person.Name) %><br />
    <%= Html.EditorFor(person => person.Name) %><br />
    <%= Html.LabelFor(person => person.Age) %><br />
    <%= Html.EditorFor(person => person.Age) %><br />
    <% foreach (String FavoriteFoods in Model.FavoriteFoods) { %>
        <%= Html.LabelFor(food => FavoriteFoods) %><br />
        <%= Html.EditorFor(food => FavoriteFoods)%><br />
    <% } %>
    <input type="submit" value="Submit" />
<% } %>

Es ist jedoch wichtig, dass rechte Seite des Ausdrucks in EditorFor und LabelFor zu beachten, muss der genaue Name der Liste, die Sie zu füllen versuchen, und die Liste des Basistypen sein muss (das heißt String, Int32, etc.). Wenn ich versuche, jedoch komplexe Typen zu verwenden, ist es immer noch nicht. Ich habe versucht, für jede Eigenschaft mit Eingängen eine Liste dieser Person Klasse angezeigt und zeigt alle von ihnen an den Browser ganz gut, aber dann gibt es eine Null-Liste auf meinen Beitrag Aktion. Wie bekomme ich den Index im Namen der Eingänge für Elemente einer Liste angezeigt?

scroll top