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

  • 相关阅读:
    C# 如何生成CHM帮助文件
    Excel导出问题
    JS一些类实现方式的性能研究
    Date对象的一些相关函数
    ECMASCRIPT5新特性(转载)
    javascript apo
    $linq A Javascript LINQ library
    javascript 编程规范
    flash 工程师的标准
    flash 弹出 网页
  • 原文地址:https://www.cnblogs.com/yechangzhong-826217795/p/5483328.html
Copyright © 2020-2023  润新知