zoukankan      html  css  js  c++  java
  • .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 = 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;"); 是为了让显示更好看的,如果在你的样式下面位置不好看你可以把这行去掉

  • 相关阅读:
    【递归】斐波那契数列第n个数
    二分查找【循环和递归】
    递归:正序、逆序输出一个正整数的各位数字
    Ubuntu x86-64汇编(5) 控制指令
    Ubuntu x86-64汇编(4) 数值操作指令
    Ubuntu x86-64汇编(3) 数值操作指令
    给X240换上了三键触摸板
    Ubuntu x86-64汇编(2)
    Ubuntu x86-64汇编(1)
    X240 Ubuntu18.04安装流水帐
  • 原文地址:https://www.cnblogs.com/sjqq/p/7380270.html
Copyright © 2011-2022 走看看