ASP.NET MVC 2 имеет мощные функции для генерации образцово-зависимого контента представления Edit (использующий EditorForModel) и представления Details (использующий DisplayForModel), который автоматически использует метаданные и редактора (или дисплей) шаблоны:
<% using (Html.BeginForm()) {%>
<%= Html.ValidationSummary(true) %>
<fieldset>
<legend><%= Html.LabelForModel() %></legend>
<%= Html.EditorForModel() %>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
<% } %>
Однако я не могу найти сопоставимые инструменты для "последнего" шага генерации представления Index (иначе представление List). Там я должен трудно кодировать столбцы сначала в строке, представляющей заголовки и затем в цикле foreach:
<h2>Index</h2>
<table>
<tr>
<th></th>
<th>
ID
</th>
<th>
Foo
</th>
<th>
Bar
</th>
</tr>
<% foreach (var item in Model) { %>
<tr>
<td>
<%= Html.ActionLink("Edit", "Edit", new { id=item.ID }) %> |
<%= Html.ActionLink("Details", "Details", new { id=item.ID })%> |
<%= Html.ActionLink("Delete", "Delete", new { id=item.ID })%>
</td>
<td>
<%= Html.Encode(item.ID) %>
</td>
<td>
<%= Html.Encode(item.Foo) %>
</td>
<td>
<%= Html.Encode(String.Format("{0:g}", item.Bar)) %>
</td>
</tr>
<% } %>
</table>
Каков был бы лучший способ генерировать столбцы (utlizing метаданные, такие как HiddenInput), с целью создания представления Index, столь же свободного от образцовых подробных сведений как Редактирование и Детали?
Я думаю, что Фил Хаак делает в значительной степени то, что вы ищете...
ASP.NET функция шаблонов MVC2 — довольно хороший способ быстро создать шаблоны объектов во время выполнения. Обязательно прочитайте фантастическую серию Брэда Уилсона на эту тему, начиная с ASP.NET MVC 2 Templates, Part 1: Introduction.
Как бы ни была хороша эта функция, есть один шаблон, который явно отсутствует. ASP.NET MVC не включает шаблон для отображения списка объектов в табличном формате.
Проверьте ссылку для получения дополнительной помощи...
Посмотрите на основанный на коде повторитель Фила Хаака. Я думаю, это может дать то, что вы ищете.