zoukankan      html  css  js  c++  java
  • 在MVC中My97date应用C#扩展方法

    项目中用的my97date,其他字段是用 @Html.EditorFor(model => model.字段)绑定的,但日历控件是用<input />绑定的,但这样写并不是特别好。

    为了也能用@HTML绑定属性,用了扩展方法。代码如下:

    public static class My97DatePicker
        {
            private static string defaultFormat = "yyyy-MM-dd";
    
            /// <summary>  
            /// 使用特定的名称生成控件  
            /// </summary>  
            /// <param name="helper">HtmlHelper对象</param>  
            /// <param name="name">控件名称</param>  
            /// <returns>Html文本</returns>  
            public static MvcHtmlString 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 MvcHtmlString 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 MvcHtmlString 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 MvcHtmlString 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 MvcHtmlString 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 MvcHtmlString 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 MvcHtmlString 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 new MvcHtmlString(value.ToString(format)) ;
                }
                else
                {
                    return new MvcHtmlString("");
    
                }
    
            }
    
    
    
            /// <summary>  
            /// 通过lambda表达式获取要显示的日期时间  
            /// </summary>  
            /// <param name="helper">HtmlHelper对象</param>  
            /// <param name="expression">lambda表达式,指定要显示的属性及其所属对象</param>  
            /// <returns>Html文本</returns>  
            public static MvcHtmlString 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 MvcHtmlString GenerateHtml(string name, DateTime? date, string format)
            {
                string str = "";
                if (date != null)
                {
                    str= "<input type="text" id="" + name + ""  onclick="WdatePicker({el:'" + name + "'})" class="Wdate" value="" + date.Value.ToString(format) + "" />";
                }
                else
                {
                    str= "<input type="text" id="" + name + ""  onclick="WdatePicker({el:'" + name + "'})" class="Wdate" value="" />";
                }
                return new MvcHtmlString(str);
            }
        }

    只要引用该方法的命名空间,我们就能愉快的使用@Html.CalendarFor等方法。当然还需要引用My97date的JS文件。

  • 相关阅读:
    KooTeam
    nopCommerce架构分析系列(一)nopCommerce简介
    NServiceBus最流行的开源企业服务总线 for .Net资源学习篇
    How to become a software architect?
    DotNetMQ: A Complete Message Queue System for .NET
    CSLA.Net专注电子商务 – Focus on eCommerce
    .net framework从1.0说到4.0
    ERP/SCM
    泛型接口的协变和逆变
    HTML5学习
  • 原文地址:https://www.cnblogs.com/GallopingSnail/p/5889675.html
Copyright © 2011-2022 走看看