【问题标题】:Templating Html.DisplayFor() in ASP.NET MVC 2在 ASP.NET MVC 2 中模板化 Html.DisplayFor()
【发布时间】:2011-01-14 01:20:27
【问题描述】:

看来,如果您只使用 Html.DisplayFor(model => model) 而不使用模板作为详细信息视图,则生成的标记将如下所示:

<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>

这具有相当程度的灵活性。如果你为display-labeldisplay-field 创建CSS 类,你可以做很多事情,但是如果我想把它改成这样呢?

<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>

请注意,现在属性值对并排显示(而不是在单独的行上),并且每个属性后面都有一个冒号。

是否有任何方法可以创建自定义模板,当详细信息视图搭建时,该模板将为每个属性值对重复?

我不是在谈论模型的特定模板(例如,Person 模板)或特定属性的模板(例如,EmailAddress 模板)。我想要一些可以让我描述属性值对的外观的东西,然后DispalyFor() 应该为我的模型或视图模型中的每个属性自动重复该模板。

【问题讨论】:

    标签: asp.net-mvc css templates scaffolding templating


    【解决方案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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多