ForEach with EditorFor

her*_*iod 3 c# entity-framework editorfor editortemplates asp.net-mvc-2

我有一个Entity模型,其中包含Message对象的集合,Message对象具有多个属性,包括content,MessageID,from和to.

我已经为Message类型创建了一个EditorTemplate,但是,我无法让它显示Messages集合的内容.

没有错误,但没有输出.

请注意,视图代码来自父级Talkback类的EditorTemplate.你有一个EditorTemplate为子集合调用另一个EditorTemplate吗?

Talkback和Message类都是由现有数据库中的Entity框架生成的.

查看代码:

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

这是我的模板代码.它是标准的自动生成的视图代码,带有一些细微的变化.

<%@ 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>
Run Code Online (Sandbox Code Playgroud)

Message集合中肯定有内容,如果我删除EditorFor并在Message类的content属性中放入response.write,我会在页面上获得3个Message对象的content字段,这与预期完全一样.

Dar*_*rov 6

您不需要foreach手动.只需放入一个名为Message.ascx包含您在~/Shared/EditorTemplates/文件夹中显示的编辑器模板的文件,并在视图中包含它:

<%: Html.EditorFor(model => model.Messages) %>
Run Code Online (Sandbox Code Playgroud)