.NET MVC3 中扩展一个HtmlHelper方法CheckBoxList
2011-07-07 15:27
525 查看
MVC中有DropDownList方法,挺好用,可是最常用的需求,一组checkboxlist咋没个类似方法呢?郁闷之余,自己做一个吧,直接上代码,呵呵
可以直接拿去用
生成的每一个checkbox外部都有一个label,感觉不错,不喜欢可以去掉,还有一个HtmlAttributes.Add("style", "margin:0 0 0 10px;line-height:30px; vertical-align:-8px;border:none;"); 是为了让显示更好看的,如果在你的样式下面位置不好看你可以把这行去掉
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 = 0; 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
- .NET MVC3中扩展一个HtmlHelper方法CheckBoxList
- [ASP.NET MVC]为HtmlHelper添加一个RadioButtonList扩展方法
- 使用HtmlHelper为ASP.NET MVC3扩展CheckBoxList
- (原创)利用扩展方法,给 IEnumerable<T> 增加一个生成 Html 的 CheckBox 标签的方法,不用 C# 中的反射技术
- 对HtmlHelper扩展二:添加RadioButtonList、CheckBoxList
- [ASP.NET MVC]为HtmlHelper添加一个RadioButtonList扩展方法
- MVC通过扩展HtmlHelper实现CheckBoxList
- HtmlHelper的扩展分页方法
- “System.Web.Mvc.HtmlHelper”不包含“RouteLink”的定义,并且找不到可接受类型为“System.Web.Mvc.HtmlHelper”的第一个参数的扩展方法“RouteLink”...
- ASP.NET MVC HtmlHelper 类的扩展方法
- ASP.Net MVC开发基础学习笔记:二、HtmlHelper与扩展方法
- 转:ASP.NET MVC扩展之HtmlHelper辅助方法
- ASP.NET MVC扩展之HtmlHelper辅助方法
- MVC分页控件之二,为IQueryable定义一个扩展方法,直接反回PagedList<T>结果集
- Mvc HtmlHelper 方法扩展 DropDownListFor
- dhl: 在 ASP.NET MVC 中创建自定义 HtmlHelper 使用扩展方法创建 HTML Helper
- MVC为Html对象建立一个扩展方法,使用自己的控件就像使用TextBox一样方便
- Tip#1-使用扩展方法创建新的HTML Helper
- 如何定义HtmlHelper扩展方法