Foreach с Editorfor.
-
04-10-2019 - |
Вопрос
У меня есть модель сущности, которая содержит коллекцию объектов сообщений, которые имеют тип сообщения, которое имеет несколько свойств, включая содержимое, сообщение, из и к.
Однако я создал EditorteMplate для сообщения типа, однако, я не могу получить его для отображения содержимого коллекции сообщений.
Нет ошибок, но ничего не выводится.
Обратите внимание, что код просмотра из редактирования для родительского класса Tovingback. Можете ли вы иметь редакторов для вызова другого Editortemplate для детской коллекции?
Как класс Takeback, и Message генерируются структурой объекта из существующей базы данных.
Просмотр кода:
<% 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>
Существует определенно содержимое в коллекции сообщений, что и если я удаляю Editorfor и вставьте в ответ. Направьте в свойство контента класса Сообщения, я получаю поле содержимого для 3 объектов сообщения на странице, который точно так же, как ожидается.
Решение
Вам не нужно foreach
вручную. Просто поставьте файл под названием Message.ascx
содержащий шаблон редактора, который вы показали внутри ~/Shared/EditorTemplates/
Папка и на вашем представлении просто включают в себя:
<%: Html.EditorFor(model => model.Messages) %>