加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 在ASP.NET MVC 2中模板化Html.DisplayFor()

发布时间:2020-12-15 20:47:08 所属栏目:asp.Net 来源:网络整理
导读:看来,如果您只使用 Html.DisplayFor(model = model)而没有模板用于Details视图,则生成的标记将如下所示: div class="display-label"first name/divdiv class="display-field"Dan/divdiv class="display-label"last name/divdiv class="display-field"M/divd
看来,如果您只使用 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>

这具有相当程度的灵活性.如果你为display-label和display-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()应该自动为我的模型或视图模型中的每个属性重复该模板.

解决方法

如何覆盖对象模板,例如
<%@ 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读