asp.net mvc 2 官方给的例子有些简单,主要介绍了新的功能。下面主要介绍下DisplayTemplates 给我们带来的实用的功能,可以自定义字段显示的方式,按类型分:String、Boolean、Decimal。按显示的方式:EmailAddress、Html、Url、HiddenInput。还可以自定义字段的显示 如:DropDownList。可以扩充类型的显示 如:DateTime,只要和字段的类型相同都可以直接使用,而不用绑定。下班一个简单的MetaData的例子。它可以扩充数据模型,定义一些自定义的内容。

 1  [MetadataType(typeof(Article_MetaData))]
 2     partial class Article
 3     {
 4 
 5     }
 6     public class Article_MetaData
 7     {
 8        
 9         [ScaffoldColumn(false)]
10         public int Id { get; set;}
11         [DisplayName("标题")]
12         [Required]
13         [SearchFilter]
14         public string title { get; set; }
15 
16         [Display( Name="",Order=12)]
17         [Required]
18         [SearchFilter]
19         [DisplayName("栏目")]
20         [DropDownList("Category", "Id", "Name")]
21         public int Cid { get; set; }
22         [DisplayName("模型")]
23         [ScaffoldColumn(false)]
24         public int ModeId { get; set; }
25         [DisplayName("排序")]
26         [Required]
27         public int OrderID { get; set; }
28         [DisplayName("时间")]
29         [Required]
30         public DateTime CreateTime { get; set; }
31 
32         [DisplayName("内容")]
33         [DataType(DataType.Html)]
34         public string Cont { get; set; }
35     }

关于MetaData的详细内容可以参考msdn上的介绍。mvc 对MetaData内的部分内容支持不是太完善,有些内容还需要自己来扩展。如[Display()]就不能使用,如果使用的话,你必须自定义 ModelMetadataProviders。通过它,你可以实现很多功能。

DisplayTemplates 文件夹内的自定义控件只针对html.display() 使用。下边说下,我使用的自定义表格,先将表格用分头部,和主体内容两部分,分别是 header、Rows。

header.ascx代码

 1 <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
 2 <script runat="server">
 3     bool ShouldShow(ModelMetadata metadata) {
 4         return metadata.ShowForDisplay
 5             && metadata.ModelType != typeof(System.Data.EntityState)
 6             && !metadata.IsComplexType
 7             && !ViewData.TemplateInfo.Visited(metadata);
 8     }
 9 </script>
10 <% if (Model == null) { %>
11     <%= ViewData.ModelMetadata.NullDisplayText %>
12 <% } else if (ViewData.TemplateInfo.TemplateDepth > 1) { %>
13     <%= ViewData.ModelMetadata.SimpleDisplayText %>
14 <% } else { %>
15 
16     <% foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => ShouldShow(pm))) { %>
17         <% if (prop.HideSurroundingHtml) { %>
18             <%= Html.Display(prop.PropertyName) %>
19         <% }
20            else if (prop.DataTypeName != "Html" && prop.DataTypeName != "MultilineText" && prop.DataTypeName != "Text")
21            { %>
22             <% if (!String.IsNullOrEmpty(prop.GetDisplayName())) { %>
23                 <th><%= prop.GetDisplayName() %></th>
24             <% } %>
25              
26         <% } %>
27     <% } %>
28   
29 
30 <% } %>

rows.ascx 代码

代码

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<script runat="server">
    bool ShouldShow(ModelMetadata metadata)
    {
        return metadata.ShowForDisplay
            && metadata.ModelType != typeof(System.Data.EntityState)
            && !metadata.IsComplexType
            && !ViewData.TemplateInfo.Visited(metadata);
    }
</script>
<% if (Model == null) { %>
    <%= ViewData.ModelMetadata.NullDisplayText %>
<% } else if (ViewData.TemplateInfo.TemplateDepth > 1) { %>
    <%= ViewData.ModelMetadata.SimpleDisplayText %>
<% } else { %>

<% foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => ShouldShow(pm))) {
        %>
        <% if (prop.HideSurroundingHtml) { %>
            <%= Html.Display(prop.PropertyName) %>
        <% } else if(prop.DataTypeName!="Html"&&prop.DataTypeName!="MultilineText"&&prop.DataTypeName!="Text") { %>
           
            <td><%= Html.Display(prop.PropertyName) %></td>
        <% } %>
    <% } %>

<% } %>

调用表格使用的代码

代码

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Admin.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
<%@ Import Namespace="mvc.Models" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Index
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
 <div id="headImg">
        <img src="/content/adminimages/01.gif" alt="" /><%:ViewData["NavTitle"]%>
        </div>
        <div id="cont2">
        <div class="form clearfix">
   
    <form id="form1" method="get">
    <div id="Search" class="clearfix">
    <%=Html.DisplayFor(m => ViewData["searchModel"], "tool","")%>

<li class="add">
        <%: Html.ActionLink("添加", "Add") %>
    </li>
    </div>
    </form>
   <table class="tb">
    <% int i = 0; foreach (var art in Model)
       {
           i++;
           if (i == 1)
           {  
           %>
  <tr  class="tbhead">
  <%=Html.DisplayFor(m => art, "header", "di")%>
  
    <th>操作</th>
  </tr>
  <%} %>
  <tr>
  <%=Html.DisplayFor(m => art, "rows", "di")%>
  <td style="width:60px">
   <%: Html.ActionLink("编辑", "Edit", new { id = art.Id })%>  <%: Html.ActionLink("删除", "Delete", new { id = art.Id }, new { onclick = "return confirm('你确定要删除吗?')" })%>
  </td>
  </tr>
  <%} %>
  </table>
    
    <div class="page">
     <%=ViewData["page"] %>
    </div>
    </div>
    </div>
</asp:Content>

转载于:https://www.cnblogs.com/wangjikun3/archive/2010/07/01/1768850.html

asp.net mvc 2 DisplayTemplates 的使用相关推荐

  1. ASP.NET MVC V2 Preview 1 发布 期望VS有更好的表现

    ASP.NET MVC V2 Preview 1官方首页:http://aspnet.codeplex.com/ 在这里可以下载 以下是网友的转载,介绍的还是比较详细的: 预览版是在.NET 3.5 ...

  2. C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(中)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(中)),不对的地方欢迎指出与交流. 章节出自<Professional C# ...

  3. Professional C# 6 and .NET Core 1.0 - Chapter 41 ASP.NET MVC

    What's In This Chapter? Features of ASP.NET MVC 6 Routing Creating Controllers Creating Views Valida ...

  4. ASP.NET MVC 2示例Tailspin Travel

    Tailspin Travel 是一个旅游预订的应用程序示例,最新版本采用ASP.NET MVC 2技术构建,主要使用 DataAnnotations 验证, 客户端验证和ViewModels,还展示 ...

  5. Asp.net MVC中的ViewData与ViewBag

    在Asp.net MVC 3 web应用程序中,我们会用到ViewData与ViewBag,对比一下: ViewData ViewBag 它是Key/Value字典集合 它是dynamic类型对像 从 ...

  6. ASP.NET MVC Identity 兩個多個連接字符串問題解決一例

    按照ASP.NET MVC Identity建立了一個用戶權限管理模塊,由于還要加自己已有的數據庫,所以建立了一個實體模型,建立了之后,發現登錄不了: 一直顯示"Login in faile ...

  7. asp.net mvc 学习

    Routing讲解: http://www.cnblogs.com/wangiqngpei557/p/3379095.html Filter讲解: http://www.cnblogs.com/ymn ...

  8. GPS部标平台的架构设计(十)-基于Asp.NET MVC构建GPS部标平台

    在当前很多的GPS平台当中,有很多是基于asp.NET+siverlight开发的遗留项目,代码混乱而又难以维护,各种耦合和关联,要命的是界面也没见到比Javascript做的控件有多好看,随着需求的 ...

  9. ASP.NET MVC:利用ASP.NET MVC4的IBundleTransform集成LESS

    背景 LESS确实不错,只是每次写完LESS都要手工编译一下有点麻烦(VS插件一直没有安装好),昨天在官方看到了如何用IBundleTransform集成LESS,今天就记录一下. 参考资料:http ...

最新文章

  1. layUI 学习记录
  2. RxJavaMVPRetrofit
  3. 专访阿里云MVP王俊杰:开发者的超能力是用技术让世界更美好
  4. 【v2.x OGE-example 第一节】 绘制实体
  5. s6-1 传输层概述
  6. python操作redis的set
  7. centos7安装mysql6_2018年第四周-在centos7安装mysql6
  8. 20145228 《信息安全系统设计基础》第0周学习总结
  9. 浅说 Rewrite规则简介
  10. Clion配置Toolchains
  11. 统计字符个数的c语言程序设计,编写一个函数,由实参传来一个字符串,统计此字符串中字母,数字,空格和其他字符的个数。...
  12. asp.net 获取当前页面html代码,在asp.net中获取当前页面的URL的方法(推荐)
  13. matlab斜抛运动不用公式,分享斜抛运动中算末速度的公式
  14. Flash:一个TLF图文并貌的高级应用类
  15. 模型小常识,C4D扫描的使用
  16. 程序员接私活的7大利器以及建议
  17. 安装完Vmware-tools后找不到共享文件夹的解决办法-Ubuntu 18有效
  18. 台式计算机中如何安装CPU,台式电脑硬件如何安装
  19. 优化代码 如何去除停顿词
  20. linux文件操作常见考题_江西理工大学linux操作系统测试题(看完必过)

热门文章

  1. 创建和应用Java包文件的两种方式(转)
  2. osg 三维gis开发_三维GIS平台的可视化应用 (下)
  3. 比亚迪定薪后多久给offer_比亚迪车主给爱车做四门隔音,没想到两年后肠子都悔青...
  4. 凯撒密码c语言小写字母,凯撒密码c(c语言编程凯撒密码)
  5. shell编程入门 linux解释器原理,Shell编程入门Linux解释器原理详细介绍 使用Shell进行工作的人们对.doc...
  6. 云服务器带宽如何计算,云服务器怎么选择带宽
  7. kail利用msf工具对ms17-010(永恒之蓝)漏洞入侵渗透Win7
  8. Linux光盘检测,qpxtool
  9. angularjs的$http请求方式
  10. 字符串、对象、数组操作方法、json方法