我需要在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;
答案 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 })%>
我希望这可以帮助遇到同样问题的其他人。