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

  • 相关阅读:
    python爬虫-selenium八大定位笔记
    git pull : error: cannot lock ref 'refs/remotes/origin/*' (unable to update local ref) 解决方案
    Lua table.sort()原理和使用的坑
    Unity---有关游戏物体角度的两种赋值方法这件事
    C# #if、#endif和预处理指令
    Unity 4大坐标系 和 屏幕坐标与UI坐标的转换问题
    第2次参加游戏开发比赛
    Unity Text添加空格导致换行问题的两种解决方法(还有lua的解决方法)
    MySQL是如何处理千万级数据
    PHP使用守护进程处理队列
  • 原文地址:https://www.cnblogs.com/zhaojingjing/p/2100121.html
Copyright © 2020-2023  润新知