3

コンテンツ、MessageID、from、toなどのいくつかのプロパティを持つMessageタイプのMessageオブジェクトのコレクションを含むエンティティモデルがあります。

メッセージタイプのEditorTemplateを作成しましたが、Messagesコレクションの内容を表示するように取得できません。

エラーはありませんが、何も出力されません。

ビューコードは、親TalkbackクラスのEditorTemplateからのものであることに注意してください。子コレクションの別のEditorTemplateを呼び出すEditorTemplateを作成できますか?

TalkbackクラスとMessageクラスはどちらも、既存のデータベースからEntityFrameworkによって生成されます。

コードを表示:

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

これは私のテンプレートコードです。これは、いくつかの小さな変更を加えた標準の自動生成ビューコードです。

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

Messageコレクションには間違いなくコンテンツが含まれています。EditorForを削除してMessageクラスのcontentプロパティにresponse.writeを入力すると、ページ上の3つのMessageオブジェクトのコンテンツフィールドが取得されます。これはまったく期待どおりです。

4

1 に答える 1

6

foreach手動で行う必要はありません。Message.ascx表示したエディターテンプレートを含むというファイルを~/Shared/EditorTemplates/フォルダー内に配置し、ビューに含めるだけです。

<%: Html.EditorFor(model => model.Messages) %>
于 2010-05-09T18:42:09.290 に答える