Я хочу отобразить статью с несколькими полями в моем представлении, но она не работает правильно: поля не отображаются (только заголовок (имена полей)).Невозможно отобразить шаблон редактора для вложенного IEnumerable
классСтатья:
public class Article : IComparable
{
public IEnumerable<ArticleField> Fields
{
get;
set;
}
[More properties...]
}
ArticleField класс:
public class ArticleField
{
// !! I want this display in a table Header !!
[Display(Name = "Name", ResourceType = typeof(Resources.Classes.ArticleField))]
[Required(ErrorMessageResourceName="required", ErrorMessageResourceType=typeof(Resources.Common.Validation))]
public string Name
{
get;
set;
}
[More properties...]
}
Index.cshtml (появляются штраф оказанной HTML)
@model MygLogWeb.Classes.Article.Article
@using (Html.BeginForm("Index", "Article", FormMethod.Post))
{
@Html.AntiForgeryToken()
<table class="table">
<tbody>
<tr>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<td>
@if (Model.IsSystem)
{
@Html.HiddenFor(model => model.Name)
@Model.Name
}
else
{
@Html.EditorFor(model => model.Name)
}
</td>
</tr>
<tr>
<th>
@Html.DisplayNameFor(model => model.IsSystem)
</th>
<td>
@Html.HiddenFor(model => model.IsSystem)
@Model.IsSystem
</td>
</tr>
</tbody>
</table>
<br style="margin: 0.5em 0em;"/>
@* POINT OF INTEREST *@
@Html.EditorFor(model => model.Fields, "ArticleFields")
<button type="submit" name="button" value="save">@Resources.Common.Buttons.save</button>
}
EditorTemplates/ArticleFields.cshtml (появляются штраф rendered html)
@model IEnumerable<MygLogWeb.Classes.Article.ArticleField>
@using MygLogWeb.Classes.Article
@{
var uid = Guid.NewGuid().ToString();
var GlobalViewBag = ViewContext.Controller.ViewBag;
GlobalViewBag.ItemCount = Model.Count();
}
<table class="table none" id="@uid">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.IsSystem)
</th>
<th>
@Html.DisplayNameFor(model => model.IsVirtual)
</th>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.Formula)
</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>
@* POINT OF INTEREST *@
@Html.EditorFor(model => model)
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="5">
<input type="button" value="@Resources.Common.Buttons.add" data-row-add="ArticleField" data-row-addto="#@uid > TBODY" />
</td>
</tr>
</tfoot>
</table>
<script type="text/javascript">
new TableEdit("@uid");
</script>
EditorTemplates/ArticleFields.cshtml (не появляется вообще оказанной HTML)
@model MygLogWeb.Classes.Article.ArticleField
xxx
я, хотя я мог бы сделать public IEnumerable<ArticleField> Fields
с List<T>
, но тогда я получаю вопрос с заголовками. Код, такой как @Html.DisplayNameFor(model => model.Formula)
, не работает.
Что-то не подходит для меня. В вашем шаблоне 'EditorTemplates/ArticleFields.cshtml' вы объявляете свою модель как« IEnumerable », но никогда не повторяете ее. Почему так? –
Насколько я знаю, я не могу повторять. Оператор [] не существует в IEnumerable и требуется для правильно названных полей. Поэтому я должен позволить MVC обрабатывать IEnumerable, как обычно, это нормально, когда ваша основная (Index.cshtml) модель является IEnumerable. – Serge
Используйте 'ToList()' then. –