Question

J'ai un modèle d'entité qui contient une collection d'objets de message qui sont du type message qui a plusieurs propriétés, y compris le contenu, MessageID, de, et.

J'ai créé un EditorTemplate pour le type message, cependant, je ne peux pas l'obtenir pour afficher le contenu de la collection de messages.

Il n'y a pas d'erreurs, mais rien est sortie.

S'il vous plaît noter que le code de vue est d'un EditorTemplate pour la classe Talkback mère. Pouvez-vous avoir un EditorTemplate appeler un autre EditorTemplate pour une collection enfant?

Les deux Talkback et classe de message sont générés par Entity Framework à partir d'une base de données existante.

Voir le code:

        <% foreach (TalkbackEntityTest.Message msg in Model.Messages)
    { 
           Html.EditorFor(x=> msg, "Message"); 
    } %>

Ceci est mon code de modèle. Il est le code standard de vue généré automatiquement avec quelques modifications mineures.

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<TalkbackEntityTest.Message>" %>

    <%: Html.ValidationSummary(true) %>

    <fieldset>
        <legend>Fields</legend>

        <div class="editor-label">
            <%: Html.LabelFor(model => model.MessageID) %>
        </div>
        <div class="editor-field">
            <%: Html.TextBoxFor(model => model.MessageID) %>
            <%: Html.ValidationMessageFor(model => model.MessageID) %>
        </div>

        <div class="editor-label">
            <%: Html.LabelFor(model => model.acad_period) %>
        </div>
        <div class="editor-field">
            <%: Html.TextBoxFor(model => model.acad_period) %>
            <%: Html.ValidationMessageFor(model => model.acad_period) %>
        </div>

        <div class="editor-label">
            <%: Html.LabelFor(model => model.talkback_id) %>
        </div>
        <div class="editor-field">
            <%: Html.TextBoxFor(model => model.talkback_id) %>
            <%: Html.ValidationMessageFor(model => model.talkback_id) %>
        </div>

        <div class="editor-label">
            <%: Html.LabelFor(model => model.From) %>
        </div>
        <div class="editor-field">
            <%: Html.TextBoxFor(model => model.From) %>
            <%: Html.ValidationMessageFor(model => model.From) %>
        </div>

        <div class="editor-label">
            <%: Html.LabelFor(model => model.To) %>
        </div>
        <div class="editor-field">
            <%: Html.TextBoxFor(model => model.To) %>
            <%: Html.ValidationMessageFor(model => model.To) %>
        </div>

        <div class="editor-label">
            <%: Html.LabelFor(model => model.SentDatetime) %>
        </div>
        <div class="editor-field">
            <%: Html.TextBoxFor(model => model.SentDatetime, String.Format("{0:g}", Model.SentDatetime)) %>
            <%: Html.ValidationMessageFor(model => model.SentDatetime) %>
        </div>

        <div class="editor-label">
            <%: Html.LabelFor(model => model.content) %>
        </div>
        <div class="editor-field">
            <%: Html.TextBoxFor(model => model.content) %>
            <%: Html.ValidationMessageFor(model => model.content) %>
        </div>

        <div class="editor-label">
            <%: Html.LabelFor(model => model.MessageTypeID) %>
        </div>
        <div class="editor-field">
            <%: Html.TextBoxFor(model => model.MessageTypeID) %>
            <%: Html.ValidationMessageFor(model => model.MessageTypeID) %>
        </div>

        <p>
            <input type="submit" value="Save" />
        </p>
    </fieldset>

Il est contenu sans aucun doute dans la collection du message comme, si je retire EditorFor et de mettre en response.write sur la propriété du contenu de la classe de message, je reçois le champ de contenu pour 3 objets message sur la page, ce qui est exactement comme prévu .

Était-ce utile?

La solution

Vous n'avez pas besoin de foreach manuellement. Il suffit de mettre un fichier appelé Message.ascx contenant le modèle de l'éditeur que vous avez montré dans le dossier ~/Shared/EditorTemplates/ et à votre avis comprennent simplement:

<%: Html.EditorFor(model => model.Messages) %>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top