[转载]asp.net mvc 2 DisplayTemplates 的使用

[转载]asp.net mvc 2 DisplayTemplates 的使用 – 飞创cms – 博客园.

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>

————————————————————————————
作者:王继坤
出处:http://www.wjk3.cn/
本文版权归作者和博客园共有,欢迎转 载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏