asp.net mvc 2 DisplayTemplates 的使用
asp.net mvc 2 官方给的例子有些简单,主要介绍了新的功能。下面主要介绍下DisplayTemplates 给我们带来的实用的功能,可以自定义字段显示的方式,按类型分:String、Boolean、Decimal。按显示的方式:EmailAddress、Html、Url、HiddenInput。还可以自定义字段的显示 如:DropDownList。可以扩充类型的显示 如:DateTime,只要和字段的类型相同都可以直接使用,而不用绑定。下班一个简单的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代码
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 代码
<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>
<% } %>
<% } %>
<% } %>
调用表格使用的代码
<%@ 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 的使用相关推荐
- ASP.NET MVC V2 Preview 1 发布 期望VS有更好的表现
ASP.NET MVC V2 Preview 1官方首页:http://aspnet.codeplex.com/ 在这里可以下载 以下是网友的转载,介绍的还是比较详细的: 预览版是在.NET 3.5 ...
- C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(中)
译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 41 ASP.NET MVC(中)),不对的地方欢迎指出与交流. 章节出自<Professional C# ...
- 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 ...
- ASP.NET MVC 2示例Tailspin Travel
Tailspin Travel 是一个旅游预订的应用程序示例,最新版本采用ASP.NET MVC 2技术构建,主要使用 DataAnnotations 验证, 客户端验证和ViewModels,还展示 ...
- Asp.net MVC中的ViewData与ViewBag
在Asp.net MVC 3 web应用程序中,我们会用到ViewData与ViewBag,对比一下: ViewData ViewBag 它是Key/Value字典集合 它是dynamic类型对像 从 ...
- ASP.NET MVC Identity 兩個多個連接字符串問題解決一例
按照ASP.NET MVC Identity建立了一個用戶權限管理模塊,由于還要加自己已有的數據庫,所以建立了一個實體模型,建立了之后,發現登錄不了: 一直顯示"Login in faile ...
- asp.net mvc 学习
Routing讲解: http://www.cnblogs.com/wangiqngpei557/p/3379095.html Filter讲解: http://www.cnblogs.com/ymn ...
- GPS部标平台的架构设计(十)-基于Asp.NET MVC构建GPS部标平台
在当前很多的GPS平台当中,有很多是基于asp.NET+siverlight开发的遗留项目,代码混乱而又难以维护,各种耦合和关联,要命的是界面也没见到比Javascript做的控件有多好看,随着需求的 ...
- ASP.NET MVC:利用ASP.NET MVC4的IBundleTransform集成LESS
背景 LESS确实不错,只是每次写完LESS都要手工编译一下有点麻烦(VS插件一直没有安装好),昨天在官方看到了如何用IBundleTransform集成LESS,今天就记录一下. 参考资料:http ...
最新文章
- layUI 学习记录
- RxJavaMVPRetrofit
- 专访阿里云MVP王俊杰:开发者的超能力是用技术让世界更美好
- 【v2.x OGE-example 第一节】 绘制实体
- s6-1 传输层概述
- python操作redis的set
- centos7安装mysql6_2018年第四周-在centos7安装mysql6
- 20145228 《信息安全系统设计基础》第0周学习总结
- 浅说 Rewrite规则简介
- Clion配置Toolchains
- 统计字符个数的c语言程序设计,编写一个函数,由实参传来一个字符串,统计此字符串中字母,数字,空格和其他字符的个数。...
- asp.net 获取当前页面html代码,在asp.net中获取当前页面的URL的方法(推荐)
- matlab斜抛运动不用公式,分享斜抛运动中算末速度的公式
- Flash:一个TLF图文并貌的高级应用类
- 模型小常识,C4D扫描的使用
- 程序员接私活的7大利器以及建议
- 安装完Vmware-tools后找不到共享文件夹的解决办法-Ubuntu 18有效
- 台式计算机中如何安装CPU,台式电脑硬件如何安装
- 优化代码 如何去除停顿词
- linux文件操作常见考题_江西理工大学linux操作系统测试题(看完必过)
热门文章
- 创建和应用Java包文件的两种方式(转)
- osg 三维gis开发_三维GIS平台的可视化应用 (下)
- 比亚迪定薪后多久给offer_比亚迪车主给爱车做四门隔音,没想到两年后肠子都悔青...
- 凯撒密码c语言小写字母,凯撒密码c(c语言编程凯撒密码)
- shell编程入门 linux解释器原理,Shell编程入门Linux解释器原理详细介绍 使用Shell进行工作的人们对.doc...
- 云服务器带宽如何计算,云服务器怎么选择带宽
- kail利用msf工具对ms17-010(永恒之蓝)漏洞入侵渗透Win7
- Linux光盘检测,qpxtool
- angularjs的$http请求方式
- 字符串、对象、数组操作方法、json方法