[转]ASP.NET MVC HtmlHelper扩展之Calendar日期时间选择
本文转自:http://blog.bossma.cn/asp_net_mvc/asp-net-mvc-htmlhelper-calendar-datetime-select/
这里我们扩展HtmlHelper,就像它包含在ASP.NET MVC中一样,扩展方法使我们能为已有的类添加方法。这里使用了一个日期时间选择控件:My97DatePicker,需要添加到网站中,并在页面中引用。
先看看是怎么扩展的:
| 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 | usingSystem;usingSystem.Collections.Generic;usingSystem.Runtime.CompilerServices;usingSystem.Linq.Expressions;namespaceSystem.Web.Mvc{    /// <summary>    /// Extended the HtmlHelper for Calendar    /// </summary>    publicstaticclassCalendarExtensions    {        privatestaticstringdefaultFormat = "yyyy-MM-dd";        /// <summary>        /// 使用特定的名称生成控件        /// </summary>        /// <param name="helper">HtmlHelper对象</param>        /// <param name="name">控件名称</param>        /// <returns>Html文本</returns>        publicstaticstringCalendar(thisHtmlHelper helper, stringname)        {            returnCalendar(helper, name, defaultFormat);        }        /// <summary>        /// 使用特定的名称生成控件        /// </summary>        /// <param name="helper">HtmlHelper对象</param>        /// <param name="name">控件名称</param>        /// <param name="format">显示格式</param>        /// <returns>Html文本</returns>        publicstaticstringCalendar(thisHtmlHelper helper, stringname, stringformat)        {            returnGenerateHtml(name, null, format);        }        /// <summary>        /// 使用特定的名称和初始值生成控件        /// </summary>        /// <param name="helper">HtmlHelper对象</param>        /// <param name="name">控件名称</param>        /// <param name="date">要显示的日期时间</param>        /// <returns>Html文本</returns>        publicstaticstringCalendar(thisHtmlHelper helper, stringname, DateTime date)        {            returnCalendar(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>        publicstaticstringCalendar(thisHtmlHelper helper, stringname, DateTime date, stringformat)        {            returnGenerateHtml(name, date, format);        }        /// <summary>        /// 通过lambda表达式生成控件        /// </summary>        /// <param name="helper">HtmlHelper对象</param>        /// <param name="expression">lambda表达式,指定要显示的属性及其所属对象</param>        /// <returns>Html文本</returns>        publicstaticstringCalendarFor<TModel, TProperty>(thisHtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression)        {            returnCalendarFor(helper, expression, defaultFormat);        }        /// <summary>        /// 通过lambda表达式生成控件        /// </summary>        /// <param name="helper">HtmlHelper对象</param>        /// <param name="expression">lambda表达式,指定要显示的属性及其所属对象</param>        /// <param name="format">显示格式</param>        /// <returns>Html文本</returns>        publicstaticstringCalendarFor<TModel, TProperty>(thisHtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, stringformat)        {            stringname = ExpressionHelper.GetExpressionText(expression);            DateTime value;            objectdata = ModelMetadata.FromLambdaExpression<TModel, TProperty>(expression, helper.ViewData).Model;            if(data != null&& DateTime.TryParse(data.ToString(), outvalue))            {                returnGenerateHtml(name, value, format);            }            else            {                returnGenerateHtml(name, null, format);            }        }        /// <summary>        /// 通过lambda表达式获取要显示的日期时间        /// </summary>        /// <param name="helper">HtmlHelper对象</param>        /// <param name="expression">lambda表达式,指定要显示的属性及其所属对象</param>        /// <param name="format">显示格式</param>        /// <returns>Html文本</returns>        publicstaticstringCalendarDisplayFor<TModel, TProperty>(thisHtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, stringformat)        {            stringname = ExpressionHelper.GetExpressionText(expression);            DateTime value;            objectdata = ModelMetadata.FromLambdaExpression<TModel, TProperty>(expression, helper.ViewData).Model;            if(data != null&& DateTime.TryParse(data.ToString(), outvalue))            {                returnvalue.ToString(format);            }            else            {                returnstring.Empty;            }        }        /// <summary>        /// 通过lambda表达式获取要显示的日期时间        /// </summary>        /// <param name="helper">HtmlHelper对象</param>        /// <param name="expression">lambda表达式,指定要显示的属性及其所属对象</param>        /// <returns>Html文本</returns>        publicstaticstringCalendarDisplayFor<TModel, TProperty>(thisHtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression)        {            returnCalendarDisplayFor(helper, expression, defaultFormat);        }        /// <summary>        /// 生成输入框的Html        /// </summary>        /// <param name="name">calendar的名称</param>        /// <param name="date">calendar的值</param>        /// <returns>html文本</returns>        privatestaticstringGenerateHtml(stringname, DateTime? date, stringformat)        {            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)%>
显示日期:<%= Html.CalendarDisplayFor(model => model.PlanStartTime)%>
日期时间选择输入框:<%= Html.CalendarFor(model => model.PlanStartTime, “yyyy-MM-dd HH:mm”)%>
posted on 2014-05-13 13:58 freeliver54 阅读(8277) 评论(2) 收藏 举报
 
                    
                     
                    
                 
                    
                 
                
            
         
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号