mvc自带的DropDownListFor数据源必须是IEnumerable<SelectListItem>。并且option不支持增加自定义属性。在使用bootstrap-select组件的时候,发现不是很好用。所以扩展了一下。

当然,因为场景的问题,我不需要group,不需要selected,所以这部分没有完成,且相应的重载方法也没有写。只有一个core方法,算是一个半成品吧。

 1 public static MvcHtmlString DropDownListForEx<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,
2 Expression<Func<TModel, object>> expression, Func<TModel, IEnumerable<TProperty>> options,
3 Func<TProperty, string> optionText, Func<TProperty, string> optionValue, string optionLabel = null,
4 Func<TProperty, IDictionary<string, object>> optionHtmlAttributes = null, IDictionary<string, object> htmlAttributes = null)
5 {
6
7 var tagNameAttr = ExpressionHelper.GetExpressionText(expression);
8 TagBuilder tag = new TagBuilder("select");
9 if (htmlAttributes != null)
10 tag.MergeAttributes(htmlAttributes);
11 tag.MergeAttribute("name", tagNameAttr, true);
12 tag.GenerateId(tagNameAttr);
13
14 StringBuilder optionsHtml = new StringBuilder();
15 var os = options(htmlHelper.ViewData.Model);
16 if (optionLabel != null)
17 {
18 TagBuilder tag3 = new TagBuilder("option");
19 tag3.SetInnerText(optionLabel);
20 optionsHtml.AppendLine(tag3.ToString(TagRenderMode.Normal));
21 }
22
23 foreach (var item in os)
24 {
25 TagBuilder tag2 = new TagBuilder("option");
26 tag2.SetInnerText(optionText(item));
27 if (optionHtmlAttributes != null)
28 tag2.MergeAttributes(optionHtmlAttributes(item));
29 tag2.MergeAttribute("value", optionValue(item), true);
30 var oHtml = tag2.ToString(TagRenderMode.Normal);
31 optionsHtml.AppendLine(oHtml);
32 }
33
34 tag.InnerHtml = optionsHtml.ToString();
35 return new MvcHtmlString(tag.ToString(TagRenderMode.Normal));
36 }
View Code

调用方式:

depInfos:List<>
 @Html.DropDownListForEx(p => p.DepCode, p => depInfos, p => p.Name, p => p.Id, "请选择", p => new Dictionary<string, object>() { { "data-tokens", p.NamePinYin+" "+p.NameFirstPinYin } }, new Dictionary<string, object> { { "class", "selectpicker" }, { "data-live-search", true } })

顺便介绍一下bootstrap-select组件。bootstrap框架下面的下拉选择组件,支持下拉搜索选择,关键字可自定义。上面的我的例子就是一个地址选择例子,使用地址的全拼,首字母拼音搜索

具体例子参考官方地址。有详细说明和demo

官方地址:http://silviomoreto.github.io/bootstrap-select

git地址:https://github.com/silviomoreto/bootstrap-select

官方例子截图:

更多相关文章

  1. 【竞价网站绝技】根据访客ip,页面显示访客所属城市的html代码(借用
  2. 浏览器的地址栏尺寸是否会影响CSS媒体查询?
  3. html高德地图ip定位之后拖动自定义定位地址
  4. instanceof php 的几个具体例子
  5. PHP将邮件发送到多个电子邮件地址
  6. PHP如何获得地址栏的特殊字符呢?
  7. 使用jQuery和ajax更改浏览器地址栏URL,无需重载页面[重复]
  8. 使用IP地址方法登录MySQL数据库Can&#39;t connect to MySQL serv
  9. 数据库行转列和列转行小例子

随机推荐

  1. Mysql中使用树的设计
  2. 数据库事务——还是这是一个规范化问题?
  3. fmdb 数据库升级1-----增加表字段
  4. CentOS 7下升级MySQL5.7.23的一个坑
  5. mysql根据查询结果创建表
  6. 报错pymysql.err.DataError: (1406, "Dat
  7. 请教用sql loader导入数据,最后一位是整数
  8. JDBC连接并使用mysql数据库
  9. SQL Server 2008使用sproc中的函数
  10. 如何在ACCESS中接收SQL SERVER返回结果集