[轉]ASP.NET MVC HtmlHelper擴展之Calendar日期時間選擇

本文轉自:http://blog.bossma.cn/asp_net_mvc/asp-net-mvc-htmlhelper-calendar-datetime-select/html

 

這裏咱們擴展HtmlHelper,就像它包含在ASP.NET MVC中同樣,擴展方法使咱們能爲已有的類添加方法。這裏使用了一個日期時間選擇控件:My97DatePicker,須要添加到網站中,並在頁面中引用。express

先看看是怎麼擴展的:mvc

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Linq.Expressions;
 
namespace System.Web.Mvc
{
     /// <summary>
     /// Extended the HtmlHelper for Calendar
     /// </summary>
     public static class CalendarExtensions
     {
         private static string defaultFormat = "yyyy-MM-dd" ;
 
         /// <summary>
         /// 使用特定的名稱生成控件
         /// </summary>
         /// <param name="helper">HtmlHelper對象</param>
         /// <param name="name">控件名稱</param>
         /// <returns>Html文本</returns>
         public static string Calendar( this HtmlHelper helper, string name)
         {
             return Calendar(helper, name, defaultFormat);
         }
 
         /// <summary>
         /// 使用特定的名稱生成控件
         /// </summary>
         /// <param name="helper">HtmlHelper對象</param>
         /// <param name="name">控件名稱</param>
         /// <param name="format">顯示格式</param>
         /// <returns>Html文本</returns>
         public static string Calendar( this HtmlHelper helper, string name, string format)
         {
             return GenerateHtml(name, null , format);
         }
 
         /// <summary>
         /// 使用特定的名稱和初始值生成控件
         /// </summary>
         /// <param name="helper">HtmlHelper對象</param>
         /// <param name="name">控件名稱</param>
         /// <param name="date">要顯示的日期時間</param>
         /// <returns>Html文本</returns>
         public static string Calendar( this HtmlHelper helper, string name, DateTime date)
         {
             return Calendar(helper, name, date, defaultFormat);
         }
 
         /// <summary>
         /// 使用特定的名稱和初始值生成控件
         /// </summary>
         /// <param name="helper">HtmlHelper對象</param>
         /// <param name="name">控件名稱</param>
         /// <param name="date">要顯示的日期時間</param>
         /// <param name="format">顯示格式</param>
         /// <returns>Html文本</returns>
         public static string Calendar( this HtmlHelper helper, string name, DateTime date, string format)
         {
             return GenerateHtml(name, date, format);
         }
 
         /// <summary>
         /// 經過lambda表達式生成控件
         /// </summary>
         /// <param name="helper">HtmlHelper對象</param>
         /// <param name="expression">lambda表達式,指定要顯示的屬性及其所屬對象</param>
         /// <returns>Html文本</returns>
         public static string CalendarFor<TModel, TProperty>( this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression)
         {
             return CalendarFor(helper, expression, defaultFormat);
         }
 
         /// <summary>
         /// 經過lambda表達式生成控件
         /// </summary>
         /// <param name="helper">HtmlHelper對象</param>
         /// <param name="expression">lambda表達式,指定要顯示的屬性及其所屬對象</param>
         /// <param name="format">顯示格式</param>
         /// <returns>Html文本</returns>
         public static string CalendarFor<TModel, TProperty>( this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, string format)
         {
             string name = ExpressionHelper.GetExpressionText(expression);
             DateTime value;
 
             object data = ModelMetadata.FromLambdaExpression<TModel, TProperty>(expression, helper.ViewData).Model;
             if (data != null && DateTime.TryParse(data.ToString(), out value))
             {
                 return GenerateHtml(name, value, format);
             }
             else
             {
                 return GenerateHtml(name, null , format);
             }
         }
 
         /// <summary>
         /// 經過lambda表達式獲取要顯示的日期時間
         /// </summary>
         /// <param name="helper">HtmlHelper對象</param>
         /// <param name="expression">lambda表達式,指定要顯示的屬性及其所屬對象</param>
         /// <param name="format">顯示格式</param>
         /// <returns>Html文本</returns>
         public static string CalendarDisplayFor<TModel, TProperty>( this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, string format)
         {
             string name = ExpressionHelper.GetExpressionText(expression);
             DateTime value;
 
             object data = ModelMetadata.FromLambdaExpression<TModel, TProperty>(expression, helper.ViewData).Model;
             if (data != null && DateTime.TryParse(data.ToString(), out value))
             {
                 return value.ToString(format);
             }
             else
             {
                 return string .Empty;
             }
         }
 
         /// <summary>
         /// 經過lambda表達式獲取要顯示的日期時間
         /// </summary>
         /// <param name="helper">HtmlHelper對象</param>
         /// <param name="expression">lambda表達式,指定要顯示的屬性及其所屬對象</param>
         /// <returns>Html文本</returns>
         public static string CalendarDisplayFor<TModel, TProperty>( this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression)
         {
             return CalendarDisplayFor(helper, expression, defaultFormat);
         }
 
         /// <summary>
         /// 生成輸入框的Html
         /// </summary>
         /// <param name="name">calendar的名稱</param>
         /// <param name="date">calendar的值</param>
         /// <returns>html文本</returns>
         private static string GenerateHtml( string name, DateTime? date, string format)
         {
             if (date != null )
             {
                 return "<input type=\"text\" id=\"" + name + "\" name=\"" + name + "\" onfocus=\"WdatePicker({dateFmt:'" + format + "'})\" class=\"Wdate\" value=\"" + date.Value.ToString(format) + "\" />" ;
             }
             else
             {
                 return "<input type=\"text\" id=\"" + name + "\" name=\"" + name + "\" onfocus=\"WdatePicker({dateFmt:'" + format + "'})\" class=\"Wdate\" value=\"\" />" ;
             }
         }
     }
}

使用辦法:網站

日期選擇輸入框: <%= Html.CalendarFor(model => model.PlanStartTime)%>this

顯示日期:<%= Html.CalendarDisplayFor(model => model.PlanStartTime)%>spa

日期時間選擇輸入框:<%= Html.CalendarFor(model => model.PlanStartTime, 「yyyy-MM-dd HH:mm」)%>code

相關文章
相關標籤/搜索