3

我需要在 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

>

4

2 回答 2

3

我不认为你可以用内置的DropDownFor助手来做到这一点。您可能应该制作自己的 SelectListItem 类和助手来配合它。您可能会发现此类似请求很有帮助。

于 2010-05-20T14:11:52.877 回答
1

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

基本上我在 /Views/Shared/Editors 文件夹下创建了一个名为“ColorSelect.ascx”的 .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 })%>

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

于 2010-05-25T18:08:02.567 回答