asp.net mvc 2 DisplayTemplates 的使用

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 { getset;}
11         [DisplayName("标题")]
12         [Required]
13         [SearchFilter]
14         public string title { getset; }
15 
16         [Display( Name="",Order=12)]
17         [Required]
18         [SearchFilter]
19         [DisplayName("栏目")]
20         [DropDownList("Category""Id""Name")]
21         public int Cid { getset; }
22         [DisplayName("模型")]
23         [ScaffoldColumn(false)]
24         public int ModeId { getset; }
25         [DisplayName("排序")]
26         [Required]
27         public int OrderID { getset; }
28         [DisplayName("时间")]
29         [Required]
30         public DateTime CreateTime { getset; }
31 
32         [DisplayName("内容")]
33         [DataType(DataType.Html)]
34         public string Cont { getset; }
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 代码

ExpandedBlockStart.gif代码
<%@ 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>
        
<% } %>
    
<% } %>
    

<% } %>

 

调用表格使用的代码

ExpandedBlockStart.gif代码
<%@ 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 = 0foreach (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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/380993.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于Tomcat端口8080占用问题(解决方法)

解决方法 打开cmd命令提示符&#xff0c;输入netstat -aov&#xff0c;在本地地址下找到8080端口&#xff0c;显示如下&#xff1a; 这个时候我们要记得PID后面的数字&#xff0c;我的是8740&#xff1a; 然后打开任务管理器&#xff0c;在详细信息下找的PID为8740的&#…

攻破Win7~Win10 PatchGuard(KPP DSE)【支持Win10 TH1/TH2/RS1/RS2】【WIN64内核越狱】

EP_X0FF和Fyyre已开源 https://github.com/hfiref0x/UPGDSED 最新状态&#xff1a;已放弃Win7.Win8,8.1的静态Patch,专注于Win10 PatchGuard. 1.重启内核越狱,支持Win7~Win10 Win10 10.0.10240.0 ~ Win10.10.0.14939.693(2017.1.11更新至693最新版) Win8 6.3.9600.18289 ~ 6.…

json tostringfiy_JS学习笔记 : 类型转换之「抽象值操作」

这要是没搞懂你好意思说学过JS&#xff1f;这怕是JavaScript中最坑、最有毒的一个部分了。将值从一种类型转换成另一种类型叫做类型转换。例如&#xff1a;var a 1;var b String(a); // "1" 显式转换var c "" a; // "1" 隐式转换在JavaScrip…

cont char *p 和 char* const p 区别及记忆方法

/* cont char *p 和 char* const p 区别及记忆方法 const char *p "hello"; 和 char const *p "hello"; 等价 保护的是内容&#xff08;即这段buffer只读&#xff0c; 记忆&#xff1a;const 在*p前&#xff0c; *p是取内容&#xff0c;保护内容&am…

eclipse和Tomcat绑定

在file下new一个Dynamic Web Project 取好名字&#xff0c;点击next 或者finish都可以&#xff0c;完成创建 点击window,选择preferences 在搜索框里输入server,然后点击Runtime Environments 点击add 我的版本是7&#xff0c;选择7&#xff0c;大家是那个版本就选择…

OD里alt+F9和Ctrl+F9和shift+F9的区别

ShiftF9 - 与F9相同&#xff0c;但是如果被调试程序发生异常而中止&#xff0c;调试器会首先尝试执行被调试程序指定的异常处理&#xff08;请参考忽略Kernel32中的内存非法访问&#xff09;。 CtrlF9 - 执行直到返回&#xff0c;跟踪程序直到遇到返回&#xff0c;在此期间不进…

kafka数据不丢失不重复_超高速底层系统数据复制,安全精准不丢失

大家好&#xff0c;我是IT数码手机控&#xff0c;一名究极数码爱好者&#xff0c;喜欢最潮最酷的数码好物&#xff0c;追求科技美学&#xff0c;数码圈里最懂艺术&#xff0c;艺术圈里最会修电脑的女汉纸~而今天就给大家介绍佑华硬盘数据拷贝机。— ❶ —外观质感拿到佑华 PRO-…

程序之美

程序的美要从两个方面进行品味&#xff0c;一是程序整体的架构之美&#xff1b;一是程序的代码实现之美。编码之美&#xff1a;编程就是为解决一个计算机能够解决的问题写出具体的程序实现。开始&#xff0c;人们总是从发现代码之美开始的&#xff0c;从把代码一股脑的写在main…

[沫忘录]mysql基础(函数及约束)

[沫忘录]mysql基础(函数及约束) mysql内置函数 字符串函数 #字符串拼接 CONCAT(S1, S2...S3)#全转小写 LOWER(str)#全转大写 UPPER(str)#用pad将str左填充至n长 LPAD(str, n, pad)#数值也可当做字符串#用pad将str右填充至n长 RPAD(str, n, pad)#去掉首尾的空格 TRIM(str)#截…

如何在Visual Studio项目中正确添加汇编代码 .

引用注明>> 【作者&#xff1a;张佩】【镜像&#xff1a;www.yiiyee.cn/blog】 1. 问题描述 在以往的编程经历中&#xff0c;本人最常使用的汇编代码是__asm {int 3}。它可以在我的代码中插入一个软件断点。如果没有一个连接到当前程序的调试器&#xff0c;则程序将…

eclipse代码发布到服务器(Tomcat)出现乱码现象解决方法

我们只需写两行代码就可以解决问题了 //设置response查询的码表 response.setCharacterEncoding(“UTF-8”); //通过一个头Content - Type 告知客户端使用何种码表 response.setHeader(“Content-Type”, “text/html;charsetUTF-8”); response.getWriter().write(“…

多叉树的前序遍历_二叉树的非递归遍历的思考

封面图来自wikipedia1 简介二叉树的深度优先遍历&#xff08;前序遍历、中序遍历、后序遍历&#xff09;是一个比较基本的操作。如果使用递归的做法&#xff0c;很容易写出相应的程序&#xff1b;而如果使用非递归的做法&#xff0c;虽然也能写出相应的代码&#xff0c;但是由于…

delphi中Label中文显示不全的问题解决办法

有时候把Label的AutoSize属性设置为True&#xff0c;当窗体显示的时候&#xff0c;Label中的内容可能会显示不完全&#xff0c;只能把AutoSize设置为False&#xff0c; 把Label调整成能显示出内容的大小。还有一种更简单的解决方法。把Form的Font属性进行如下设置&#xff1a;字…

vs+vm双机调试

基础&#xff1a; VS2017安装成功 wdk10 注意事项&#xff1a; 关闭 、主机 客户机 防火墙 、 互相ping都能ping通。 一、具体操作步骤 工具安装就不说了&#xff0c;不会的百度一下。只说一下一些关键的地方。 1、安装好虚拟机后&#xff0c;给虚拟机增加一个串口设备。具体…

为什么要返回softmax_为什么softmax搭配cross entropy是解决分类问题的通用方案?

众所周知&#xff0c;softmaxcross entropy是在线性模型、神经网络等模型中解决分类问题的通用方案&#xff0c;但是为什么选择这种方案呢&#xff1f;它相对于其他方案有什么优势&#xff1f;笔者一直也困惑不解&#xff0c;最近浏览了一些资料&#xff0c;有一些小小心得&…

servlet下载文件(注意文件名字必须是英文)

直接将代码放在servlet下&#xff0c;把文件名字换成自己要下载的就行 文件要放在WEGCONTEN下 //获得下载文件的名称String filename request.getParameter("filename");//要下载的这个文件的类型 -----客户端根据mime类型区分别response.setContentType(this.getS…

2010.07.13_19:30

又是地铁中&#xff0c;音乐在响&#xff0c;离目的地一半&#xff0c;又一天上班结束。转载于:https://www.cnblogs.com/sunxi2003/archive/2010/07/13/1776724.html

焊接空间臂_焊接烟尘净化器设备哪种好

焊接烟尘净化器设备采用滤筒除尘器&#xff0c;焊接烟尘净化器用于焊接、切割、打磨等工序中产生烟尘和粉尘的净化以及对稀有金属、贵重物料的回收等&#xff0c;可净化大量悬浮在空气中对人体有害的细小金属颗粒。具有净化效率高、噪声低、使用灵活、占地面积小等特点。 适用于…

关于Tomcat文件下载中文名乱码现象

//获得下载文件的名称 String filename request.getParameter(“filename”); //解决获得中文参数的乱码 filename new String(filename.getBytes(“ISO8859-1”),“UTF-8”); //获得请求头的User-Agent String agent request.getHeader(“User-Agent”); //根据不同的浏览器…

【摘录】C语言中利用 strtok函数进行字符串分割

C语言不像Java,Php之类的高级语言&#xff0c;对象中直接封装了字符串的处理函数。C语言中进行普通的字符串处理也经常会让我们焦头烂额……不过好在C语言 中还是提供了像strtok这样功能强大的字符串处理函数&#xff0c;可以帮我们实现部分需要的功能。下面我们介绍一下strtok…