ASP.NET MVC:将自定义属性放入选择列表中的选项标记中

时间:2009-12-01 23:02:43

标签: asp.net asp.net-mvc drop-down-menu

我正在使用ASP.NET MVC,并且正在尝试使用HtmlHelper.DropDownListFor方法呈现选择列表,如下所示:

<%= Html.DropDownListFor(x => x.AllTopics, SelectListHelper.GetSelectListItems(Model.AllTopics), "Select a Topic", new { id = "allTopics", @class = "topic-dropdown" })%>

其中SelectListHelper只返回我们传入的任何集合中的IList<SelectListItem>。这适用于简单的事情,但我希望能够为每个选项添加title属性标记( 选择列表本身)。但是DropDownListFor只接受IEnumerable<SelectListItem>,并且SelectListItem没有我可以放在title属性中的任何地方。

有没有办法在没有提到DropDownListFor方法的情况下执行此操作并手动写出选择列表和每个元素?

2 个答案:

答案 0 :(得分:4)

DropDownList和衍生产品不支持您正在寻找的功能。但您也可以简单地处理DropDownList返回的字符串。

<%= 
  Html.DropDownListFor(x => x.AllTopics,
    SelectListHelper.GetSelectListItems(Model.AllTopics),
    "Select a Topic", 
    new { id = "allTopics", @class = "topic-dropdown" })
  .Replace("<option", "<option attr=\"value\"")
%>

答案 1 :(得分:2)

查看MVC源代码,DropDownListFor使用DropDownListSelectInternal使用ListItemToOption,它使用{{1}},它包含对TagBuilder的调用。您可以修改并包含此源以在构建实际选项标记时接受对TagBuilder的额外调用。