惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google Online Security Blog
Google Online Security Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
C
CERT Recently Published Vulnerability Notes
C
Cybersecurity and Infrastructure Security Agency CISA
Cisco Talos Blog
Cisco Talos Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
Scott Helme
Scott Helme
Project Zero
Project Zero
E
Exploit-DB.com RSS Feed
S
Secure Thoughts
K
Kaspersky official blog
L
Lohrmann on Cybersecurity
NISL@THU
NISL@THU
WordPress大学
WordPress大学
N
News and Events Feed by Topic
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
L
LINUX DO - 热门话题
小众软件
小众软件
P
Privacy & Cybersecurity Law Blog
博客园 - 聂微东
Google DeepMind News
Google DeepMind News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
A
About on SuperTechFans
Hacker News: Ask HN
Hacker News: Ask HN
AWS News Blog
AWS News Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
H
Hacker News: Front Page
F
Full Disclosure
Latest news
Latest news
Schneier on Security
Schneier on Security
The Hacker News
The Hacker News
T
Troy Hunt's Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Jina AI
Jina AI
Martin Fowler
Martin Fowler
P
Proofpoint News Feed
TaoSecurity Blog
TaoSecurity Blog
G
GRAHAM CLULEY
Forbes - Security
Forbes - Security
V
V2EX - 技术
酷 壳 – CoolShell
酷 壳 – CoolShell
V
Vulnerabilities – Threatpost
C
Cyber Attacks, Cyber Crime and Cyber Security
MongoDB | Blog
MongoDB | Blog
博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题
Hugging Face - Blog
Hugging Face - Blog
P
Privacy International News Feed
C
Check Point Blog
N
News and Events Feed by Topic

博客园 - 残香恨

WinForm:如何设置DataGridView列标题对齐方式 WinForm:如何在ListBox中添加CheckBox ASP.NET WebForm开发WAP网站 lock语句的递归问题 VS 2010 调试 .NET Framework 源代码 最近遇到的两个问题 SynchronizationContext对Windows Forms窗体控件的更新方法 - 残香恨 SQL Server 2008 Express 升级R2全过程 自定义ASP.NET MVC Html辅助方法 - 残香恨 将ASP.NET MVC 1.0升级到ASP.NET MVC 2的三种方法 .NET 4.0:一段动态绑定代码的底层初级分析 Visual Studio 2010 RTM版安装初体验 .NET中的线程 .NET 4.0 任务(Task) C#4.0 动态绑定(Dynamic Binding) - 残香恨 .NET4.0新功能:任务(Task) - 残香恨 .NET4.0线程池的Cooperative Cancellation模式 - 残香恨 Visual Studio 2010 RC初体验 - 残香恨 SQL Server导入文本文件时选择相同数据类型的一个小技巧 - 残香恨
ASP.NET MVC 2 模板化辅助方法
残香恨 · 2010-06-23 · via 博客园 - 残香恨

  模板化辅助方法是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查看。