代码之家  ›  专栏  ›  技术社区  ›  Ben Lesh

MVC2中selectListitems的自定义HTML属性?

  •  3
  • Ben Lesh  · 技术社区  · 15 年前

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

    2 回复  |  直到 14 年前
        1
  •  3
  •   Community CDub    8 年前

    我觉得你不能用内置的 DropDownFor 帮手。您可能应该让自己的SelectListItem类和助手与之配套使用。你可能会发现 this similar request 乐于助人。

        2
  •  1
  •   Ben Lesh    15 年前

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

    基本上,我在/views/shared/editors文件夹下创建了一个名为“colorselect.ascx”的.ascx。

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

    <%@ 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 })%>
    

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