ASP.NET MVC HtmlHelper扩展之Calendar日期时间选择

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)%>

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

日期时间选择输入框:<%= Html.CalendarFor(model => model.PlanStartTime, “yyyy-MM-dd HH:mm”)%>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值