代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Linq.Expressions;
  5. using System.Web;
  6. using System.Web.Mvc;
  7. using System.Web.Routing;
  8. using System.Web.UI;
  9.  
  10. namespace System.Web.Mvc.Html
  11. {
  12. public static class HtmlExtension
  13. {
  14. /// <summary>
  15. /// 扩展 DropdownList 列表1
  16. /// </summary>
  17. /// <param name="helper">扩展源</param>
  18. /// <param name="name">元素名称</param>
  19. /// <param name="items">SelectListItem集合</param>
  20. /// <param name="attributes">html属性</param>
  21. /// <returns></returns>
  22. public static MvcHtmlString DropdownList(this HtmlHelper helper, string name, IEnumerable<SelectListItem> items, object attributes = null)
  23. {
  24. return helper.DropDownList(name, items, attributes);
  25. }
  26. /// <summary>
  27. /// 扩展 DropdownList 列表2
  28. /// </summary>
  29. /// <param name="helper">扩展源</param>
  30. /// <param name="name">元素名称</param>
  31. /// <param name="viewDataName">ViewData键名称</param>
  32. /// <param name="attributes">html属性</param>
  33. /// <returns></returns>
  34. public static MvcHtmlString DropdownList(this HtmlHelper helper, string name, string viewDataName, object attributes = null)
  35. {
  36. List<SelectListItem> list = helper.ViewData[viewDataName] as List<SelectListItem>;
  37. return helper.DropDownList(name, list, attributes);
  38. }
  39. /// <summary>
  40. /// 扩展 DropdownList 列表3
  41. /// </summary>
  42. /// <typeparam name="TModel">实体</typeparam>
  43. /// <typeparam name="TValue">属性</typeparam>
  44. /// <param name="helper"></param>
  45. /// <param name="expression">表达式</param>
  46. /// <param name="items">数据列表</param>
  47. /// <param name="column">每行显示个数</param>
  48. /// <param name="attributes">html属性</param>
  49. /// <returns></returns>
  50. public static MvcHtmlString DropdownListFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, IEnumerable<SelectListItem> items, object attributes = null)
  51. {
  52. return helper.DropDownListFor(expression, items, attributes);
  53. }
  54.  
  55. /// <summary>
  56. /// 扩展 DropdownList 列表4
  57. /// </summary>
  58. /// <typeparam name="TModel">实体</typeparam>
  59. /// <typeparam name="TValue">属性</typeparam>
  60. /// <param name="helper"></param>
  61. /// <param name="expression">表达式</param>
  62. /// <param name="viewDataName">viewData数据列表名称</param>
  63. /// <param name="attributes">html属性</param>
  64. /// <returns></returns>
  65. public static MvcHtmlString DropdownListFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, string viewDataName, object attributes = null)
  66. {
  67. List<SelectListItem> list = helper.ViewData[viewDataName] as List<SelectListItem>;
  68. return helper.DropdownListFor(expression, list, attributes);
  69. }
  70.  
  71. /// <summary>
  72. /// 扩展 radiobutton 列表1
  73. /// </summary>
  74. /// <typeparam name="TModel">实体</typeparam>
  75. /// <typeparam name="TValue">属性</typeparam>
  76. /// <param name="helper"></param>
  77. /// <param name="expression">表达式</param>
  78. /// <param name="items">数据列表</param>
  79. /// <param name="column">每行显示个数</param>
  80. /// <param name="attributes">html属性</param>
  81. /// <returns></returns>
  82. public static MvcHtmlString RadioButtonListFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, IEnumerable<SelectListItem> items, int column = , object attributes = null)
  83. {
  84. string raidobuttonStr = "";
  85. BuildListTag(out raidobuttonStr, "radio", items, expression, column, attributes);
  86. return MvcHtmlString.Create(raidobuttonStr);
  87. }
  88.  
  89. /// <summary>
  90. /// 扩展 radiobutton 列表2
  91. /// </summary>
  92. /// <typeparam name="TModel">实体</typeparam>
  93. /// <typeparam name="TValue">属性</typeparam>
  94. /// <param name="helper"></param>
  95. /// <param name="expression">表达式</param>
  96. /// <param name="viewDataName">viewData数据列表名称</param>
  97. /// <param name="column">每行显示个数</param>
  98. /// <param name="attributes">属性</param>
  99. /// <returns></returns>
  100. public static MvcHtmlString RadioButtonListFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, string viewDataName, int column = , object attributes = null)
  101. {
  102. string raidobuttonStr = "";
  103. var items = helper.ViewData[viewDataName] as List<SelectListItem>;
  104. BuildListTag(out raidobuttonStr, "radio", items, expression, column, attributes);
  105. return MvcHtmlString.Create(raidobuttonStr);
  106. }
  107.  
  108. /// <summary>
  109. /// 扩展 CheckBox 列表1
  110. /// </summary>
  111. /// <typeparam name="TModel">实体</typeparam>
  112. /// <typeparam name="TValue">属性</typeparam>
  113. /// <param name="helper"></param>
  114. /// <param name="expression">表达式</param>
  115. /// <param name="items">数据列表</param>
  116. /// <param name="column">每行显示个数</param>
  117. /// <param name="attributes">html属性</param>
  118. /// <returns></returns>
  119. public static MvcHtmlString CheckBoxListFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, IEnumerable<SelectListItem> items, int column = , object attributes = null)
  120. {
  121. string raidobuttonStr = "";
  122. BuildListTag(out raidobuttonStr, "checkbox", items, expression, column, attributes);
  123. return MvcHtmlString.Create(raidobuttonStr);
  124. }
  125.  
  126. /// <summary>
  127. /// 扩展 CheckBox 列表2
  128. /// </summary>
  129. /// <typeparam name="TModel">实体</typeparam>
  130. /// <typeparam name="TValue">属性</typeparam>
  131. /// <param name="helper"></param>
  132. /// <param name="expression">表达式</param>
  133. /// <param name="viewDataName">viewData数据列表名称</param>
  134. /// <param name="column">每行显示个数</param>
  135. /// <param name="attributes">属性</param>
  136. /// <returns></returns>
  137. public static MvcHtmlString CheckBoxListFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, string viewDataName, int column = , object attributes = null)
  138. {
  139. string raidobuttonStr = "";
  140. var items = helper.ViewData[viewDataName] as List<SelectListItem>;
  141. BuildListTag(out raidobuttonStr, "checkbox", items, expression, column, attributes);
  142. return MvcHtmlString.Create(raidobuttonStr);
  143. }
  144.  
  145. /// <summary>
  146. /// 构造radioList或者checkBoxList标签
  147. /// </summary>
  148. /// <typeparam name="TModel"></typeparam>
  149. /// <typeparam name="TValue"></typeparam>
  150. /// <param name="raidobuttonStr">拼接的字符窜</param>
  151. /// <param name="tag">标签(checkbox or radio)</param>
  152. /// <param name="expression">表达式</param>
  153. /// <param name="items">数据列表</param>
  154. /// <param name="column">每行显示个数</param>
  155. /// <param name="attributes">属性</param>
  156. private static void BuildListTag<TModel, TValue>(out string raidobuttonStr, string tag, IEnumerable<SelectListItem> items, Expression<Func<TModel, TValue>> expression, int column = , object attributes = null)
  157. {
  158. raidobuttonStr = "";
  159. if (items != null && items.Any())
  160. {
  161. int count = ;
  162. ///获取表达式属性名称
  163. var name = (expression.Body as MemberExpression).Member.Name;
  164. foreach (var item in items)
  165. {
  166. TagBuilder raidobutton = new TagBuilder("input");
  167. raidobutton.Attributes.Add("type", tag);
  168. raidobutton.Attributes.Add("name", name);
  169. raidobutton.Attributes.Add("value", item.Value);
  170. if (item.Selected)
  171. {
  172. raidobutton.Attributes.Add("checked", "checked");
  173. }
  174. if (attributes != null)
  175. {
  176. raidobutton.MergeAttributes(new RouteValueDictionary(attributes));
  177. }
  178.  
  179. raidobuttonStr += raidobutton.ToString(TagRenderMode.SelfClosing);
  180. raidobuttonStr += item.Text;
  181. raidobuttonStr += "&nbsp;&nbsp;&nbsp;";
  182.  
  183. if (column == )
  184. {
  185. raidobuttonStr += "<br/>";
  186. }
  187. ///根据每行显示个数设置换行
  188. else
  189. {
  190. if (count == column && column != )
  191. {
  192. raidobuttonStr += "<br/>";
  193. }
  194. }
  195. count++;
  196. }
  197. }
  198. }
  199. }
  200. }

使用方法:

@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

MVC扩展HtmlHelper,加入RadioButtonList、CheckBoxList、DropdownList的更多相关文章

  1. ASP.NET MVC 扩展HtmlHelper类方法

    1.扩展HtmlHelper类方法ShowPageNavigate 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 ...

  2. mvc 扩展htmlhelper

    using System.Web.Mvc; namespace System.Web.Mvc{    public static class HtmlExtend    {        public ...

  3. ASP.NET MVC 扩展HtmlHelper类为 js ,css 资源文件添加版本号

    写在前面 在项目部署当中会需要更新 css 文件或 js 等资源文件,为了避免由于浏览器缓存的原因无法加载新的 css 或 js ,一般的做法是在资源文件的后面加上一个版本号来解决,这样浏览器就会去服 ...

  4. mvc扩展HtmlHelper功能

    HtmlHelper详细介绍 简单示例 自定义HtmlHelper 解决: 直接写HTML的话如果语句有语法错误,如缺少结尾标记</b>,编译器不会报错,出来的页面可能会很乱且难以查出错误 ...

  5. MVC扩展生成CheckBoxList并水平排列

    本篇体验生成CheckBoxList的几个思路,扩展MVC的HtmlHelper生成CheckBoxList,并使之水平排开.     通过遍历从控制器方法拿到的Model集合 □ 思路 比如为一个用 ...

  6. MVC 自定义Htmlhelper扩展

    在MVC中,我们不仅可以使用它原来的方法,我们还可以自定义,这不不仅加大了我们开发的效率,同时使界面更简洁. 具体什么是扩展方法,你可以这样理解,必须是静态且在形参中第一个参数是以this开头,大概先 ...

  7. Asp.Net MVC 扩展 Html.ImageFor 方法详解

    背景: 在Asp.net MVC中定义模型的时候,DataType有DataType.ImageUrl这个类型,但htmlhelper却无法输出一个img,当用脚手架自动生成一些form或表格的时候, ...

  8. MVC中HtmlHelper用法大全参考

    MVC中HtmlHelper用法大全参考 解析MVC中HtmlHelper控件7个大类中各个控件的主要使用方法(1) 2012-02-27 16:25 HtmlHelper类在命令System.Web ...

  9. MVC 扩展 Html.ImageFor

    Asp.Net MVC 扩展 Html.ImageFor 方法详解 背景: 在Asp.net MVC中定义模型的时候,DataType有DataType.ImageUrl这个类型,但htmlhelpe ...

随机推荐

  1. java 总结代码块

    判断str2在str中出现了多少次: //msg: // // 世界上最痛苦的事 莫过于有眼睛却发现不了美 有耳朵却不会欣赏音乐 有心灵却无法理解什么是最真 // 世界上最痛苦的事 莫过于错过了不该错 ...

  2. corejava-内容梳理

  3. uva-11205-枚举子集

    题意: 至少用多少列来表示输入中的二进制数,并且表示的数里面没有重复,最多P列,N个二进制数 所以......表示的最大二进制数是2^P,那么在2^P方内的数二进制最大值是P个1,最小是0,所以,枚举 ...

  4. UVA133

    减少领取救济金排队的长度是一个严重的问题,The New National Green Labour RhinocerosParty (这个党派)依据如下规则.每天来领取救济金的人排成一个大圆环.任选 ...

  5. idea建立一个maven项目

    前言:虽然之前实习的时候有过spring框架的实践,但是因为基本上都是在已有的基础上进行修修补补,并没有对Spring框架有深刻的理解.所以从今天起,要从零开始对Spring框架进行学习.在此之前,第 ...

  6. mysql5.7.13 使用笔记

    社区版下载地址:https://dev.mysql.com/downloads/mysql/ 安装:http://www.linuxidc.com/Linux/2016-04/130414.htm   ...

  7. xml转json的方法

    .第一种方法 使用JSON-JAVA提供的方法,之前一直使用json-lib提供的方法转json,后来发现了这个开源项目,觉得用起来很不错,并且可以修改XML.java中的parse方法满足自己的转换 ...

  8. IP 别名和辅助 IP 地址

    https://blog.csdn.net/xiewen99/article/details/54729112?utm_source=itdadao

  9. myBatis连接MySQL报异常:No operations allowed after connection closed.Connection was implicitly closed

    网站运行一个晚上,早上来上班,发现报错: ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTra ...

  10. os内置模块

    import os 1.os.getcwd() # 获得当前文件路径 2.os.chdir()   # 改变当前目录 3.os.curdir #  . 表示当前目录 4.os.pardir # 表示上 ...