MVC扩展HtmlHelper实现CheckBoxList
类别:编程学习 浏览量:1877
时间:2016-4-1 MVC扩展HtmlHelper实现CheckBoxList
MVC扩展HtmlHelper实现CheckBoxListCheckBoxList在Web页面应用非常广泛,在传统的ASP.NET aspx中系统自带有CheckBoxList控件,但是在MVC Razer中没有提供,下面介绍通过扩展HtmlHelper实现CheckBoxList的方法
public static class CheckBoxListHelper
{
public static MvcHtmlString CheckBoxList(this HtmlHelper helper, string name, bool isHorizon = true)
{
return CheckBoxList(helper, name, helper.ViewData[name] as IEnumerable<SelectListItem>, new { }, isHorizon);
}
public static MvcHtmlString CheckBoxList(this HtmlHelper helper, string name, IEnumerable<SelectListItem> selectList, bool isHorizon = true)
{
return CheckBoxList(helper, name, selectList, new { }, isHorizon);
}
public static MvcHtmlString CheckBoxListFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList, bool isHorizon = true)
{
string[] propertys = expression.ToString().Split(".".ToCharArray());
string id = string.Join("_", propertys, 1, propertys.Length - 1);
string name = string.Join(".", propertys, 1, propertys.Length - 1);
return CheckBoxList(helper, id, name, selectList, new { }, isHorizon);
}
public static MvcHtmlString CheckBoxList(this HtmlHelper helper, string name, IEnumerable<SelectListItem> selectList, object htmlAttributes, bool isHorizon = true)
{
return CheckBoxList(helper, name, name, selectList, htmlAttributes, isHorizon);
}
public static MvcHtmlString CheckBoxList(this HtmlHelper helper, string id, string name, IEnumerable<SelectListItem> selectList, object htmlAttributes, bool isHorizon = true)
{
IDictionary<string, object> HtmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
HashSet<string> set = new HashSet<string>();
List<SelectListItem> list = new List<SelectListItem>();
string selectedValues = (selectList as SelectList).SelectedValue == null ? string.Empty : 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].Trim());
}
}
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", id);
HtmlAttributes.Add("name", name);
HtmlAttributes.Add("style", "border:none;");
StringBuilder stringBuilder = new StringBuilder();
foreach (SelectListItem selectItem in selectList)
{
IDictionary<string, object> newHtmlAttributes = HtmlAttributes.IDictionaryCopy();
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);
string containerFormat = isHorizon ? @"<label> {0} {1}</label>" : @"<p><label> {0} {1}</label></p>";
stringBuilder.AppendFormat(containerFormat,
inputAllHtml, selectItem.Text);
}
return MvcHtmlString.Create(stringBuilder.ToString());
}
private static IDictionary<string, object> IDictionaryCopy(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;
}
}
调用方式
@Html.CheckBoxList("保存SelectList的ViewData名称") 或者 @Html.CheckBoxList("CheckBoxList名称",new SelectList(IEnumerable items, string dataValueField, string dataTextField, object selectedValue),是否水平显示) 或者 @Html.CheckBoxList("CheckBoxList名称",new SelectList(IEnumerable items, string dataValueField, string dataTextField, object selectedValue),其它html属性,是否水平显示)
@Html.CheckBoxListFor(m => m.aaa, new SelectList(IEnumerable items, string dataValueField, string dataTextField, object selectedValue),是否水平显示)
标签:MVC
您可能感兴趣
- MVC中JSON字符长度超出限制
- MVC中报get_RazorKeywords()错误的解决方法
- mvc中@helper的用法
- mvc中validateinput属性失效
- MVC使用HandleErrorAttribute自定义异常
- mvc renderpartial
- mysql mvcc 流程(Mysql MVCC机制原理详解)
- MVC中数据验证
- MVC中BeginForm
- MVC上传文件的方法
- mvc编译时,让View中的错误提示
- php框架使用方法大全(PHP MVC框架中类的自动加载机制实例分析)
- php框架制作方法(PHP从零开始打造自己的MVC框架之路由类实现方法分析)
- MVC 使用FileResult导出文件
- python如何编写一个用户登录系统(Python实现的登录验证系统完整案例基于搭建的MVC框架)
- mvc中使用uploadify批量上传
- 苹果正式发布自研芯片M1 5nm 32核心 彻底放弃Intel(苹果正式发布自研芯片M1)
- 苹果自研芯片跑分对比 A16芯片排名靠后,M1系列霸榜(苹果自研芯片跑分对比)
- X86处理器的梦魇 苹果M1自研芯片到底有多强(苹果M1自研芯片到底有多强)
- 泰剧《爱欲之神》Boom kitkong和Great合体杂志(泰剧爱欲之神Boomkitkong和Great合体杂志)
- 素人恋爱综艺火药味十足 男生为赢得芳心集体扯头花,真是出好戏(素人恋爱综艺火药味十足)
- 《囧妈》为何受抵制 春节七部影片撤档背后的责任与博弈(囧妈为何受抵制)
热门推荐
- php如何复制数组(php5对象复制、clone、浅复制与深复制实例详解)
- mysql8.0.26安装教程(mysql 8.0.22压缩包完整安装与配置教程图解亲测安装有效)
- 微信小程序可以用百度的echarts吗(uniapp在微信小程序中使用ECharts的方法)
- 云服务器和物理服务器哪个可靠(云服务器与香港服务器有什么区别?)
- dedecms更新后设置空白(织梦DedeCms上传的图片点击打开改为不新窗口打开)
- laravel 验证规则(Laravel中正确地返回HTTP状态码方法示例)
- docker-compose怎么被执行的(Docker Compose一键ELK部署的方法实现)
- css 模块阴影(CSS 曲线阴影实现的示例代码)
- DBnull和null的区别
- css实现很炫酷的效果(纯CSS实现酷炫的霓虹灯效果附demo)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9