[转载].NET MVC3 中扩展一个HtmlHelper方法CheckBoxList

[转载].NET MVC3 中扩展一个HtmlHelper方法CheckBoxList – 单程列车 – 博客园.

MVC中有DropDownList方法,挺好用,可是最常用的需求,一组checkboxlist咋没个类似方法呢?郁闷之余,自己做一个吧,直接上代码,呵呵

public static MvcHtmlString CheckBoxList(this HtmlHelper helper, string name, IEnumerable
selectList)
{
return CheckBoxList(helper, name, selectList, new { });
}
public static MvcHtmlString CheckBoxList(this HtmlHelper helper, string name, IEnumerable
selectList, object htmlAttributes)
{

IDictionary HtmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);

HashSet set = new HashSet();
List
list = new List
();
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 newHtmlAttributes = HtmlAttributes.DeepCopy();
newHtmlAttributes.Add("value", selectItem.Value);
if(selectItem.Selected)
{
newHtmlAttributes.Add("checked", "checked");
}

TagBuilder tagBuilder = new TagBuilder("input");
tagBuilder.MergeAttributes(newHtmlAttributes);
string inputAllHtml= tagBuilder.ToString(TagRenderMode.SelfClosing);
stringBuilder.AppendFormat(@"<label> {0}  {1}</label>",
inputAllHtml, selectItem.Text);
}
return MvcHtmlString.Create(stringBuilder.ToString());

}
private static IDictionary DeepCopy(this IDictionary ht)
{
Dictionary _ht=new Dictionary();

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

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏