MVC2中SelectListItems上的自定义HTML属性?

时间:2010-05-20 13:50:42

标签: asp.net-mvc asp.net-mvc-2 drop-down-menu model-binding

我需要在Html.DropDownFor()生成的选项中为选项标签添加自定义HTML属性,特别是类或样式。

我一直在玩它,而对于我的生活,我无法弄清楚我需要做些什么才能得到我需要的工作。

假设我有一个颜色列表,我正在生成下拉列表,其中选项值是颜色的标识符,文本是名称...这是我希望能够看到的输出:

<select name="Color">
   <option value="1" style="background:#ff0000">Red</option>
   <option value="2" style="background:#00ff00">Green</option>
   <option value="3" style="background:#0000ff">Blue</option>
   <!-- more here -->
   <option value="25" style="background:#f00f00">Foo Foo</option>
</select

&GT;

2 个答案:

答案 0 :(得分:3)

我认为你不能使用内置的DropDownFor助手来做到这一点。您可能应该创建自己的SelectListItem类和帮助程序。您可能会发现this similar request有帮助。

答案 1 :(得分:1)

我最终创建了自己的共享编辑器模板。

基本上我在名为“ColorSelect.ascx”的/ Views / Shared / Editors文件夹下创建了一个.ascx

然后在.ascx里面我添加了以下内容:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.Int64>" %>
<%var colors = ViewData["Colors"] as ColorTable;
  var name = Html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(String.Empty);
  var id = Html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(String.Empty);
%>
  <select name="<%=name %>" id="<%=id %>">
  <%foreach(var color in colors) {%>
    <option value="<%=color.Id %>" style="background:<%=color.Hex%>;"<%if(color.Id == Model) { %> selected="selected"<%} %>><%:color.Name %></option>
  <%} %>  
  </select>

在我的视图(.aspx)中,我这样做了:

<%=Html.EditorFor(x => x.ColorId, "ColorSelect", new { Colors = Model.ColorTable })%>

我希望这可以帮助遇到同样问题的其他人。