Шаблонная обработка HTML. DisplayFor () в ASP.NET MVC 2

Кажется это, если Вы просто используете 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() должен автоматически повторить что шаблон для каждого свойства в моей модели или модели представления.

6
задан devuxer 7 February 2010 в 17:26
поделиться

1 ответ

Как насчет переопределения шаблона 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>
    <% } %>

См. http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-4-custom-object-templates.html

9
ответ дан 10 December 2019 в 02:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: