Кажется это, если Вы просто используете Html.DisplayFor(model => model)
без шаблонов для представления Details будет выглядеть примерно так получающаяся разметка:
<div class="display-label">first name</div>
<div class="display-field">Dan</div>
<div class="display-label">last name</div>
<div class="display-field">M</div>
<div class="display-label">email</div>
<div class="display-field">danm@fakedomain.com</div>
Это имеет справедливую степень гибкости. Если Вы создаете классы CSS для display-label
и display-field
, можно ли сделать вполне немного, но что, если я хотел изменить его на что-то вроде этого?
<p>
<span class="display-label">first name</span>:
<span class="display-field">Dan</span>
</p>
<p>
<span class="display-label">last name</span>:
<span class="display-field">M</span>
</p>
<p>
<span class="display-label">email</span>:
<span class="display-field">danm@fakedomain.com</span>
</p>
Обратите внимание, что теперь пары значения атрибута теперь появляются бок о бок (вместо на отдельных строках) и после каждого атрибута существует двоеточие.
Там какой-либо путь состоит в том, чтобы создать пользовательский шаблон, который будет повторен для каждой пары значения атрибута, когда представление деталей будет лесами?
Я не говорю об определенном шаблоне для модели (например, a Person
шаблон) или шаблон для особого свойства (например, EmailAddress
шаблон). Я хочу что-то, что просто позволяет мне описать, как пара значения атрибута смотрит, затем DispalyFor()
должен автоматически повторить что шаблон для каждого свойства в моей модели или модели представления.
Как насчет переопределения шаблона Object
, например
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<% if (ViewData.TemplateInfo.TemplateDepth > 3) { %>
<%= ViewData.ModelMetadata.SimpleDisplayText %>
<% } else { %>
<table>
<% foreach (ModelMetadata prop in ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForDisplay && !ViewData.TemplateInfo.Visited(pm))) { %>
<% if (prop.HideSurroundingHtml) { %>
<%= Html.Display(prop.PropertyName) %>
<% } else { %>
<tr>
<td>
<div class="display-label" style="text-align: right;">
<%= Html.Label(prop.PropertyName) %>
</div>
</td>
<td>
<div class="display-field">
<%= Html.Display(prop.PropertyName) %>
<%= Html.ValidationMessage(prop.PropertyName, "*") %>
</div>
</td>
</tr>
<% } %>
<% } %>
</table>
<% } %>