.NET MVC3中扩展一个HtmlHelper方法CheckBoxList
MVC中有DropDownList方法,挺好用,可是最常用的需求,一组checkboxlist咋没个类似方法呢?郁闷之余,自己做一个吧,直接上代码
- public static MvcHtmlString CheckBoxList(this HtmlHelper helper, string name, IEnumerable<SelectListItem> selectList)
- {
- return CheckBoxList(helper, name, selectList, new { });
- }
- public static MvcHtmlString CheckBoxList(this HtmlHelper helper, string name, IEnumerable<SelectListItem> selectList, object htmlAttributes)
- {
- IDictionary<string, object> HtmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
- HashSet<string> set = new HashSet<string>();
- List<SelectListItem> list = new List<SelectListItem>();
- string selectedValues = Convert.ToString((selectList as SelectList).SelectedValue);
- if (!string.IsNullOrEmpty(selectedValues))
- {
- if (selectedValues.Contains(","))
- {
- string[] tempStr = selectedValues.Split(',');
- for (int i = ; i < tempStr.Length; i++)
- {
- set.Add(tempStr[i]);
- }
- }
- else
- {
- set.Add(selectedValues);
- }
- }
- foreach (SelectListItem item in selectList)
- {
- item.Selected = (item.Value != null) ? set.Contains(item.Value) : set.Contains(item.Text);
- list.Add(item);
- }
- selectList = list;
- HtmlAttributes.Add("type", "checkbox");
- HtmlAttributes.Add("id", name);
- HtmlAttributes.Add("name", name);
- HtmlAttributes.Add("style", "margin:0 0 0 10px;line-height:30px; vertical-align:-8px;border:none;");
- StringBuilder stringBuilder = new StringBuilder();
- foreach (SelectListItem selectItem in selectList)
- {
- IDictionary<string, object> newHtmlAttributes = HtmlAttributes.DeepCopy();
- newHtmlAttributes.Add("value", selectItem.Value);
- if(selectItem.Selected)
- {
- newHtmlAttributes.Add("checked", "checked");
- }
- TagBuilder tagBuilder = new TagBuilder("input");
- tagBuilder.MergeAttributes<string, object>(newHtmlAttributes);
- string inputAllHtml= tagBuilder.ToString(TagRenderMode.SelfClosing);
- stringBuilder.AppendFormat(@"<label style=""margin:0 0 0 10px;""> {0} {1}</label>",
- inputAllHtml, selectItem.Text);
- }
- return MvcHtmlString.Create(stringBuilder.ToString());
- }
- private static IDictionary<string, object> DeepCopy(this IDictionary<string, object> ht)
- {
- Dictionary<string, object> _ht=new Dictionary<string,object>();
- foreach (var p in ht)
- {
- _ht.Add(p.Key, p.Value);
- }
- return _ht;
- }
可以直接拿去用
生成的每一个checkbox外部都有一个label,感觉不错,不喜欢可以去掉,还有一个HtmlAttributes.Add("style", "margin:0 0 0 10px;line-height:30px; vertical-align:-8px;border:none;"); 是为了让显示更好看的,如果在你的样式下面位置不好看你可以把这行去掉
.NET MVC3中扩展一个HtmlHelper方法CheckBoxList的更多相关文章
- 为IEnumerable扩展一个ForEach方法
IEnumerable没有一个ForEach方法,我们可以使用C#写一个扩展方法: Source Code: using System; using System.Collections.Generi ...
- 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 ...
- 按要求编写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+= ...
- 编写一个名为Test的主类,类中只有一个主方法; 在主方法中定义一个大小为50的一维整型数组,数组名为x,数组中存放着{1, 3,5,…,99}输出这个数组中的所有元素,每输出十个换一行;在主方法中定义一 个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’;输出这个数组中的所有元素。
package liu0915; import java.util.Random; public class Test0915sz { public static void main(String[] ...
- springmvc中针对一个controller方法配置两个url请求
转自:https://blog.csdn.net/sun5769675/article/details/50252019
- MVC教程七:扩展HtmlHelper方法
在上一篇文章的最后,列出了一些常见的HtmlHelper的方法,这些都是ASP.NET MVC已经定义好的,如果我们想自己定义一个HtmlHelper方法可以吗?答案是肯定的,那么如何自定义一个Htm ...
- Asp.net MVC3 中,动态添加filter
Asp.net MVC3 中,动态添加filter filter是attribute,不支持泛型,传入的参数必须是固定的值.总之很受attribute本身的限制. 发现一篇老外的文章,动态设置filt ...
- 在TypeScript中扩展JavaScript基础对象的功能
最近工作中用到,记录一下:假设我们需要一个功能,把一个数字比如10000输出为下面的字符串格式“10,000”,一般是写一个方法,那么我希望更方便一点,直接向Number类型添加一个格式化方法,比如叫 ...
- Js中的一个日期处理格式化函数
由于在工作中,经常需要对日期进行格式化,不像后端那样,有方便的方法可调用,可以在date的对象prototype中定义一个format方法,见如下 //日期时间原型增加格式化方法 Date.proto ...
随机推荐
- 通过hibernate session.connection()获得数据库连接时,导致的查询缓慢甚至假死机问题
在使用hibernate的应用中,如果需要直接使用Java.sql.Connection,一般我们是通过hibernate的session.connection()获得的,然后session.clos ...
- Music
Music 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=88890#problem/C 题目: Description Lit ...
- 李洪强iOS经典面试题上
李洪强iOS经典面试题上 1. 风格纠错题 修改完的代码: 修改方法有很多种,现给出一种做示例: // .h文件 // http://weibo.com/luohanchenyilong/ / ...
- 模拟淘宝使用cookie记录登录名,
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- Js中this用法及注意点详解
我们在写js时,特别是用到回调函数时,经常会发现this指代的对象总是可能脱离自己的思路而发生改变.面向对象语言的特性告诉我们this始终指代它的调用者,而在js中回调函数中内部的this ...
- Js特效--模仿滚动条(兼容IE8+,FF,Google)
<html> <head> <style> *{margin:0px;padding:0px;} #box{width:200px;height:500px;pos ...
- Web前端代码页面布局总结
一. html (1)编码:所有编码均采用xhtml,标签必须闭合,属性值用双引号包括,编码统一为utf-8. (2)语义化:语义化html,正确使用标签. (3)文件命名:命名以中文命名,依实际模 ...
- 自动解析URL
function parseURL(url) { var a = document.createElement('a'); a.href = url; return { source: url, pr ...
- document获取节点byId&byName
<script type="text/javascript"> /* *需要:获取页面中的DIV节点: *思路: *通过docment对象完成.因为div节点有ID属性 ...
- Final-阶段站立会议2
组名:天天向上 组长:王森 组员:张政.张金生.林莉.胡丽娜 代码地址:HTTPS:https://git.coding.net/jx8zjs/llk.git SSH:git@git.coding.n ...