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

ASP.NET MVC:将自定义属性放入选择列表中的选项标记中,asp.net,asp.net-mvc,drop-down-menu,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" })%> x.AllTo

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

<%= Html.DropDownListFor(x => x.AllTopics, SelectListHelper.GetSelectListItems(Model.AllTopics), "Select a Topic", new { id = "allTopics", @class = "topic-dropdown" })%>
x.AllTopics,SelectListHelper.GetSelectListItems(Model.AllTopics),“选择主题”,新建{id=“AllTopics”,@class=“Topic dropdown”})%>
其中,SelectListHelper仅从我们传递的任何集合返回一个
IList
。这适用于简单的事情,但我希望能够为每个选项标记添加一个title属性(选择列表本身)。但是DropDownListFor只接受一个
IEnumerable
,SelectListItem没有任何可以放在title属性中的位置


有没有什么方法可以做到这一点,而不用前面提到DropDownListFor方法并手工写出选择列表和每个元素?

查看MVC源代码,
DropDownListFor
使用
DropDownList
,它使用
SelectInternal
,它使用
ListItemToOption
,它包装了对TagBuilder的调用。您可以修改并包含此源,以便在生成实际选项标记时接受对TagBuilder的额外调用。

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\"")
%>
x.AllTopics,
SelectListHelper.GetSelectListItems(Model.AllTopics),
“选择主题”,
新建{id=“allTopics”,@class=“topic dropdown”})

.替换("这将是最简单的,但当我需要为每个选项的title属性指定不同的值时,问题就出现了。然后,这就变成了字符串操作的噩梦。是的,这就是我最终要做的…基本上就是从.NET Reflector中撕下一堆代码。看起来很有效,但由于最近的所有其他废话,这让我有点紧张方法似乎正在发挥作用,这可能会有点难以理解。我想我们只需按原样修复它。无需使用Reflector;ASP.NET MVC的代码是公开的: