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

  • 相关阅读:
    gulp4.0 存在的错误信息 The following tasks did not complete: default,Did you forget to signal async completion?
    高性能前端 art-template 模板
    cookie 详解
    Cross origin requests are only supported for protocol schemes: http, data, chrome,chrome-extension的问题
    jQuery EasyUI 详解
    我的游戏学习日志1——恐龙快打
    我的游戏学习日志2——雪人兄弟
    关于网页导航栏制作的几种方法与常见问题解决(新人向)
    JavaScript基础
    利用CSS3制作网页动画
  • 原文地址:https://www.cnblogs.com/sjqq/p/7380270.html
Copyright © 2011-2022 走看看