MVC中有DropDownList方法,挺好用,可是最常用的需求,一组checkboxlist咋没个类似方法呢?郁闷之余,自己做一个吧,直接上代码

  1. public static MvcHtmlString CheckBoxList(this HtmlHelper helper, string name, IEnumerable<SelectListItem> selectList)
  2. {
  3. return CheckBoxList(helper, name, selectList, new { });
  4. }
  5. public static MvcHtmlString CheckBoxList(this HtmlHelper helper, string name, IEnumerable<SelectListItem> selectList, object htmlAttributes)
  6. {
  7.  
  8. IDictionary<string, object> HtmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
  9.  
  10. HashSet<string> set = new HashSet<string>();
  11. List<SelectListItem> list = new List<SelectListItem>();
  12. string selectedValues = Convert.ToString((selectList as SelectList).SelectedValue);
  13. if (!string.IsNullOrEmpty(selectedValues))
  14. {
  15. if (selectedValues.Contains(","))
  16. {
  17. string[] tempStr = selectedValues.Split(',');
  18. for (int i = ; i < tempStr.Length; i++)
  19. {
  20. set.Add(tempStr[i]);
  21. }
  22.  
  23. }
  24. else
  25. {
  26. set.Add(selectedValues);
  27. }
  28. }
  29.  
  30. foreach (SelectListItem item in selectList)
  31. {
  32. item.Selected = (item.Value != null) ? set.Contains(item.Value) : set.Contains(item.Text);
  33. list.Add(item);
  34. }
  35. selectList = list;
  36.  
  37. HtmlAttributes.Add("type", "checkbox");
  38. HtmlAttributes.Add("id", name);
  39. HtmlAttributes.Add("name", name);
  40. HtmlAttributes.Add("style", "margin:0 0 0 10px;line-height:30px; vertical-align:-8px;border:none;");
  41.  
  42. StringBuilder stringBuilder = new StringBuilder();
  43.  
  44. foreach (SelectListItem selectItem in selectList)
  45. {
  46. IDictionary<string, object> newHtmlAttributes = HtmlAttributes.DeepCopy();
  47. newHtmlAttributes.Add("value", selectItem.Value);
  48. if(selectItem.Selected)
  49. {
  50. newHtmlAttributes.Add("checked", "checked");
  51. }
  52.  
  53. TagBuilder tagBuilder = new TagBuilder("input");
  54. tagBuilder.MergeAttributes<string, object>(newHtmlAttributes);
  55. string inputAllHtml= tagBuilder.ToString(TagRenderMode.SelfClosing);
  56. stringBuilder.AppendFormat(@"<label style=""margin:0 0 0 10px;""> {0} {1}</label>",
  57. inputAllHtml, selectItem.Text);
  58. }
  59. return MvcHtmlString.Create(stringBuilder.ToString());
  60.  
  61. }
  62. private static IDictionary<string, object> DeepCopy(this IDictionary<string, object> ht)
  63. {
  64. Dictionary<string, object> _ht=new Dictionary<string,object>();
  65.  
  66. foreach (var p in ht)
  67. {
  68. _ht.Add(p.Key, p.Value);
  69. }
  70. return _ht;
  71. }

可以直接拿去用

生成的每一个checkbox外部都有一个label,感觉不错,不喜欢可以去掉,还有一个HtmlAttributes.Add("style", "margin:0 0 0 10px;line-height:30px; vertical-align:-8px;border:none;"); 是为了让显示更好看的,如果在你的样式下面位置不好看你可以把这行去掉

.NET MVC3中扩展一个HtmlHelper方法CheckBoxList的更多相关文章

  1. 为IEnumerable扩展一个ForEach方法

    IEnumerable没有一个ForEach方法,我们可以使用C#写一个扩展方法: Source Code: using System; using System.Collections.Generi ...

  2. 16.按要求编写Java应用程序。 编写一个名为Test的主类,类中只有一个主方法; 在主方法中定义一个大小为50的一维整型数组,数组名为x,数组中存放着{1, 3,5,…,99}输出这个数组中的所有元素,每输出十个换一行;在主方法中定义一 个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’;输出这个数组中的所有元素。

    //分类 package com.bao; public class Shuchu { int[]yi=new int[50]; String[][]er=new String[10][10]; vo ...

  3. 按要求编写Java应用程序。 编写一个名为Test的主类,类中只有一个主方法; 在主方法中定义一个大小为50的一维整型数组,数组名为x,数组中存放着{1, 3,5,…,99}输出这个数组中的所有元素,每输出十个换一行;在主方法中定义一 个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’;输出这个数组中的所有元素。

    int[]x=new int [50]; char[][]y=new char[10][10]; int j=1,w=0; for(int i=0;i<50;i++) { x[i]=j; j+= ...

  4. 编写一个名为Test的主类,类中只有一个主方法; 在主方法中定义一个大小为50的一维整型数组,数组名为x,数组中存放着{1, 3,5,…,99}输出这个数组中的所有元素,每输出十个换一行;在主方法中定义一 个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’;输出这个数组中的所有元素。

    package liu0915; import java.util.Random; public class Test0915sz { public static void main(String[] ...

  5. springmvc中针对一个controller方法配置两个url请求

    转自:https://blog.csdn.net/sun5769675/article/details/50252019

  6. MVC教程七:扩展HtmlHelper方法

    在上一篇文章的最后,列出了一些常见的HtmlHelper的方法,这些都是ASP.NET MVC已经定义好的,如果我们想自己定义一个HtmlHelper方法可以吗?答案是肯定的,那么如何自定义一个Htm ...

  7. Asp.net MVC3 中,动态添加filter

    Asp.net MVC3 中,动态添加filter filter是attribute,不支持泛型,传入的参数必须是固定的值.总之很受attribute本身的限制. 发现一篇老外的文章,动态设置filt ...

  8. 在TypeScript中扩展JavaScript基础对象的功能

    最近工作中用到,记录一下:假设我们需要一个功能,把一个数字比如10000输出为下面的字符串格式“10,000”,一般是写一个方法,那么我希望更方便一点,直接向Number类型添加一个格式化方法,比如叫 ...

  9. Js中的一个日期处理格式化函数

    由于在工作中,经常需要对日期进行格式化,不像后端那样,有方便的方法可调用,可以在date的对象prototype中定义一个format方法,见如下 //日期时间原型增加格式化方法 Date.proto ...

随机推荐

  1. 通过hibernate session.connection()获得数据库连接时,导致的查询缓慢甚至假死机问题

    在使用hibernate的应用中,如果需要直接使用Java.sql.Connection,一般我们是通过hibernate的session.connection()获得的,然后session.clos ...

  2. Music

    Music 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=88890#problem/C 题目: Description Lit ...

  3. 李洪强iOS经典面试题上

    李洪强iOS经典面试题上     1. 风格纠错题 修改完的代码: 修改方法有很多种,现给出一种做示例: // .h文件 // http://weibo.com/luohanchenyilong/ / ...

  4. 模拟淘宝使用cookie记录登录名,

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  5. Js中this用法及注意点详解

          我们在写js时,特别是用到回调函数时,经常会发现this指代的对象总是可能脱离自己的思路而发生改变.面向对象语言的特性告诉我们this始终指代它的调用者,而在js中回调函数中内部的this ...

  6. Js特效--模仿滚动条(兼容IE8+,FF,Google)

    <html> <head> <style> *{margin:0px;padding:0px;} #box{width:200px;height:500px;pos ...

  7. Web前端代码页面布局总结

    一.  html (1)编码:所有编码均采用xhtml,标签必须闭合,属性值用双引号包括,编码统一为utf-8. (2)语义化:语义化html,正确使用标签. (3)文件命名:命名以中文命名,依实际模 ...

  8. 自动解析URL

    function parseURL(url) { var a = document.createElement('a'); a.href = url; return { source: url, pr ...

  9. document获取节点byId&byName

    <script type="text/javascript"> /* *需要:获取页面中的DIV节点: *思路: *通过docment对象完成.因为div节点有ID属性 ...

  10. Final-阶段站立会议2

    组名:天天向上 组长:王森 组员:张政.张金生.林莉.胡丽娜 代码地址:HTTPS:https://git.coding.net/jx8zjs/llk.git SSH:git@git.coding.n ...