ASP.NET MVC 2 模板化辅助方法

  模板化辅助方法是ASP.NET MVC 2 中的一个新增功能点,它帮助我们以模板化的方式处理一些UI问题,比如:我们要对某个以ASP.NET MVC 2开发的网站上的所有时间日期做特殊格式化处理,我们不可能每一个页面都去查找修改,用模板化辅助方法会为我们带来极大的方便。模板化辅助方法分成两种情况,一种是模板化显示,一种是模板化编辑。

  一、模板化显示

  模板化显示帮助我们以某种我们想要的方法来处理一个列表,甚至整个站点中的某个类型的显示问题。为了更清楚地说明问题,我们先以模板化方式对一个System.DateTime类型及Decimal类型进行模板化处理为例。如下图1所示的一个项目中:

 

(图1)

运行Index页面,所得的列表如下图2所示:

 

(图2)

假设这时,你的老板觉得Tuition列非常难看,要求加上人民币符号,如:¥5000.00,EnrolTime列的时间也非常难看,要求显示为:2010-5-25,整个网站有Tuition列和EnrollTime列的页面有200个,要求你6点下班之前搞定,现在已经5:30了,怎么办?此时,模板化方法的强大之处就显现出来了。首先,我们在Student目录下新建一个文件夹,命名为DisplayTemplates,注意,这个命名不能错,否则,MVC框架找不到相应的模板。然后,我们新建两个用户自定义模板文件,一个为DateTime.ascx(与DateTime类型相对应),另一个为Decimal.ascx(与Decimal类型相对应)。

然后在DateTime.ascx文件中写下如下代码:

 

<%= string.Format("{0:d}", Model) %>

在Decimal.ascx文件中写下如下代码:

 

 

<%= Model.ToString("c", System.Globalization.CultureInfo.CreateSpecificCulture("zh-cn"))%>

然后我们运行重新编译,运行代码,则会出现如下图3所示的效果(为了区分,我特意将两列的颜色变了):

 

(图3)

当然,你会发现,整个网站的相应字段显示都变了。

  这里需要重点说明的是,如果你把DisplayTemplates文件夹建在Student目录下,那么只有Student下的视图才能使用里面的模板;如果将DisplayTemplates文件夹建在Shared目录下,那么整个Views目录下的视图都可以使用其中的模板。MVC搜索的顺序是先找相应控制器名称下的DisplayTemplates文件夹里的模板,如果没有再去找Shared目录下的DisplayTemplates文件夹里的模板。如果对应控制器名称的视图和Shared目录下都有DisplayTemplates文件夹,且里面的模板都有效,那么,MVC会优先使用对应控制器名称下的模板。

  二、模板化编辑

  模板化编辑同样也是非常有用的功能,它可以为我们提供对字段的额外编辑功能。例如,当我们对一个时间日期字段进行编辑时,面对不友好的2010-5-25字符,我们是不是希望有个日期控件能帮助我们做这个事呢,我们只需要点击一下就可以进入输入时间日期了呢。面对这个问题,模板化编辑为我们提供了解决方案。

  同样,我们在图1所示的项目中的Student目录下添加一个EditorTemplates目录。然后在EditorTemplates目录下添加一个DateTime.ascx文件,输入如下代码:

 

<%: Html.TextBox("", Model.HasValue ? Model.Value.ToString("yyyy-MM-dd") : string.Empty, new { @class = "datePicker" })%>

再在相应页面添加如下JS引用及代码:

 

 

代码
<script src="http://www.cnblogs.com/Scripts/jquery-1.4.2.min.js" type="text/javascript"></script>
<script src="http://www.cnblogs.com/Scripts/jquery-ui-1.8.1.custom.min.js" type="text/javascript"></script>
<script src="http://www.cnblogs.com/Scripts/jquery.ui.datepicker-zh-CN.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
$(
".datePicker").datepicker({ showOn: 'both', buttonImage: "http://www.cnblogs.com/Content/images/btn_calendar.gif" });
});
</script>

再将编辑页面对应的字段由Html.TextBoxFor方法改为Html.EditorFor方法,然后运行,则会出现如下图4所示的效果:

 

 

(图4)

是不是非常方便与友好,这样,你就不用去输入那么时间日期数据了。

  三、总结

  文本以两个极简单的例子演示了模板化辅助方法(Templated helper)的使用,希望对大家有所帮助。如果上面的例子中有讲得不明白的地方,请在此处下载Demo查看。

posted @ 2010-06-23 01:40  残香恨  阅读(1929)  评论(3编辑  收藏  举报