zoukankan      html  css  js  c++  java
  • MVC扩展HtmlHelper,加入RadioButtonList、CheckBoxList、DropdownList

    代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Linq.Expressions;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Routing;
    using System.Web.UI;
    
    namespace System.Web.Mvc.Html
    {
        public static class HtmlExtension
        {
            /// <summary>
            /// 扩展 DropdownList 列表1
            /// </summary>
            /// <param name="helper">扩展源</param>
            /// <param name="name">元素名称</param>
            /// <param name="items">SelectListItem集合</param>
            /// <param name="attributes">html属性</param>
            /// <returns></returns>
            public static MvcHtmlString DropdownList(this HtmlHelper helper, string name, IEnumerable<SelectListItem> items, object attributes = null)
            {
                return helper.DropDownList(name, items, attributes);
            }
            /// <summary>
            /// 扩展 DropdownList 列表2
            /// </summary>
            /// <param name="helper">扩展源</param>
            /// <param name="name">元素名称</param>
            /// <param name="viewDataName">ViewData键名称</param>
            /// <param name="attributes">html属性</param>
            /// <returns></returns>
            public static MvcHtmlString DropdownList(this HtmlHelper helper, string name, string viewDataName, object attributes = null)
            {
                List<SelectListItem> list = helper.ViewData[viewDataName] as List<SelectListItem>;
                return helper.DropDownList(name, list, attributes);
            }
            /// <summary>
            /// 扩展 DropdownList 列表3
            /// </summary>
            /// <typeparam name="TModel">实体</typeparam>
            /// <typeparam name="TValue">属性</typeparam>
            /// <param name="helper"></param>
            /// <param name="expression">表达式</param>
            /// <param name="items">数据列表</param>
            /// <param name="column">每行显示个数</param>
            /// <param name="attributes">html属性</param>
            /// <returns></returns>
            public static MvcHtmlString DropdownListFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, IEnumerable<SelectListItem> items, object attributes = null)
            {
                return helper.DropDownListFor(expression, items, attributes);
            }
    
            /// <summary>
            /// 扩展 DropdownList 列表4
            /// </summary>
            /// <typeparam name="TModel">实体</typeparam>
            /// <typeparam name="TValue">属性</typeparam>
            /// <param name="helper"></param>
            /// <param name="expression">表达式</param>
            /// <param name="viewDataName">viewData数据列表名称</param>
            /// <param name="attributes">html属性</param>
            /// <returns></returns>
            public static MvcHtmlString DropdownListFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, string viewDataName, object attributes = null)
            {
                List<SelectListItem> list = helper.ViewData[viewDataName] as List<SelectListItem>;
                return helper.DropdownListFor(expression, list, attributes);
            }
    
            /// <summary>
            /// 扩展 radiobutton 列表1
            /// </summary>
            /// <typeparam name="TModel">实体</typeparam>
            /// <typeparam name="TValue">属性</typeparam>
            /// <param name="helper"></param>
            /// <param name="expression">表达式</param>
            /// <param name="items">数据列表</param>
            /// <param name="column">每行显示个数</param>
            /// <param name="attributes">html属性</param>
            /// <returns></returns>
            public static MvcHtmlString RadioButtonListFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, IEnumerable<SelectListItem> items, int column = 0, object attributes = null)
            {
                string raidobuttonStr = "";
                BuildListTag(out raidobuttonStr, "radio", items, expression, column, attributes);
                return MvcHtmlString.Create(raidobuttonStr);
            }
    
            /// <summary>
            /// 扩展 radiobutton 列表2
            /// </summary>
            /// <typeparam name="TModel">实体</typeparam>
            /// <typeparam name="TValue">属性</typeparam>
            /// <param name="helper"></param>
            /// <param name="expression">表达式</param>
            /// <param name="viewDataName">viewData数据列表名称</param>
            /// <param name="column">每行显示个数</param>
            /// <param name="attributes">属性</param>
            /// <returns></returns>
            public static MvcHtmlString RadioButtonListFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, string viewDataName, int column = 0, object attributes = null)
            {
                string raidobuttonStr = "";
                var items = helper.ViewData[viewDataName] as List<SelectListItem>;
                BuildListTag(out raidobuttonStr, "radio", items, expression, column, attributes);
                return MvcHtmlString.Create(raidobuttonStr);
            }
    
    
            /// <summary>
            /// 扩展 CheckBox 列表1
            /// </summary>
            /// <typeparam name="TModel">实体</typeparam>
            /// <typeparam name="TValue">属性</typeparam>
            /// <param name="helper"></param>
            /// <param name="expression">表达式</param>
            /// <param name="items">数据列表</param>
            /// <param name="column">每行显示个数</param>
            /// <param name="attributes">html属性</param>
            /// <returns></returns>
            public static MvcHtmlString CheckBoxListFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, IEnumerable<SelectListItem> items, int column = 0, object attributes = null)
            {
                string raidobuttonStr = "";
                BuildListTag(out raidobuttonStr, "checkbox", items, expression, column, attributes);
                return MvcHtmlString.Create(raidobuttonStr);
            }
    
            /// <summary>
            /// 扩展 CheckBox 列表2
            /// </summary>
            /// <typeparam name="TModel">实体</typeparam>
            /// <typeparam name="TValue">属性</typeparam>
            /// <param name="helper"></param>
            /// <param name="expression">表达式</param>
            /// <param name="viewDataName">viewData数据列表名称</param>
            /// <param name="column">每行显示个数</param>
            /// <param name="attributes">属性</param>
            /// <returns></returns>
            public static MvcHtmlString CheckBoxListFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, string viewDataName, int column = 0, object attributes = null)
            {
                string raidobuttonStr = "";
                var items = helper.ViewData[viewDataName] as List<SelectListItem>;
                BuildListTag(out raidobuttonStr, "checkbox", items, expression, column, attributes);
                return MvcHtmlString.Create(raidobuttonStr);
            }
    
            /// <summary>
            /// 构造radioList或者checkBoxList标签
            /// </summary>
            /// <typeparam name="TModel"></typeparam>
            /// <typeparam name="TValue"></typeparam>
            /// <param name="raidobuttonStr">拼接的字符窜</param>
            /// <param name="tag">标签(checkbox or  radio)</param>
            /// <param name="expression">表达式</param>
            /// <param name="items">数据列表</param>
            /// <param name="column">每行显示个数</param>
            /// <param name="attributes">属性</param>
            private static void BuildListTag<TModel, TValue>(out string raidobuttonStr, string tag, IEnumerable<SelectListItem> items, Expression<Func<TModel, TValue>> expression, int column = 0, object attributes = null)
            {
                raidobuttonStr = "";
                if (items != null && items.Any())
                {
                    int count = 1;
                    ///获取表达式属性名称
                    var name = (expression.Body as MemberExpression).Member.Name;
                    foreach (var item in items)
                    {
                        TagBuilder raidobutton = new TagBuilder("input");
                        raidobutton.Attributes.Add("type", tag);
                        raidobutton.Attributes.Add("name", name);
                        raidobutton.Attributes.Add("value", item.Value);
                        if (item.Selected)
                        {
                            raidobutton.Attributes.Add("checked", "checked");
                        }
                        if (attributes != null)
                        {
                            raidobutton.MergeAttributes(new RouteValueDictionary(attributes));
                        }
    
                        raidobuttonStr += raidobutton.ToString(TagRenderMode.SelfClosing);
                        raidobuttonStr += item.Text;
                        raidobuttonStr += "&nbsp;&nbsp;&nbsp;";
    
                        if (column == 1)
                        {
                            raidobuttonStr += "<br/>";
                        }
                        ///根据每行显示个数设置换行
                        else
                        {
                            if (count == column && column != 0)
                            {
                                raidobuttonStr += "<br/>";
                            }
                        }
                        count++;
                    }
                }
            }
        }
    }

    使用方法:

    @Html.CheckBoxListFor(item => item.AllRoles, "Roles", 5)
    @Html.DropdownListFor(item => item.AllRoles, "Roles")
    @Html.DropdownList("AllRoles", "Roles")
    @Html.DropdownListFor(item => item.TypeID, ViewData["ArticleTypes"] as List<SelectListItem>)
    还有其他的一些重载方法,我没有逐个写出,大家都可以试试。
    http://www.cnblogs.com/artech/archive/2012/03/13/code-binding.html
    http://www.cnblogs.com/a546558309/p/4554592.html

  • 相关阅读:
    Druid时序数据库常见问题及处理方式
    常用环境变量配置
    Hadoop学习(四) FileSystem Shell命令详解
    Hadoop学习(二) Hadoop配置文件参数详解
    Hadoop学习(一) Hadoop是什么
    Sqoop帮助文档
    CentOS搭建Sqoop环境
    Zookeeper系列(二) Zookeeper配置说明
    查看sql 作业明细及运行记录
    java性能测试工具 jprofiler
  • 原文地址:https://www.cnblogs.com/xsj1989/p/6923863.html
Copyright © 2011-2022 走看看