2010-05-20 78 views
3

我需要將自定義HTML屬性,特別是類或樣式添加到由Html.DropDownFor()生成的選擇中的選項標記。MVC2中SelectListItems的自定義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 

>

回答

1

我最終創建了我自己的共享編輯器模板。

基本上我創建/查看/共享/編輯稱爲 「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 })%> 

我希望這可以幫助其他人遇到同樣的問題,我有。

3

我不認爲你可以使用內置的DropDownFor幫助做到這一點。您可能應該創建自己的SelectListItem類和幫助程序以配合它。您可能會發現this similar request有幫助。