2010-11-23 36 views
1

我被困在我認爲將是ASP.Net MVC2中一個非常簡單的任務。如何擴展MVC2 DropDownList/ListBox幫助程序以在選擇選項元素上包含自定義屬性?

我需要爲某些SELECT OPTION元素應用背景顏色。要生成下拉列表,我們使用了Html.DropDownList和Html.ListBox html helper,理想情況下我想繼續使用這些,所以我不必處理從表單集合中重新綁定選定的項目時表單已提交併重新顯示。

由於原因,我不會進入Html幫助器從我們編寫的另一個HTML幫助器中調用,所以它們不在視圖中。該代碼看起來像這樣...

var setOfOptions = question.AnswerList.Values.Select(x => new SelectListItem(){ 
          Value = x.ID.ToString(), 
          Text = x.Caption + " - " + x.Style, 
          Selected = question.Answers.Contains((object)x.ID) 
         }); 
answerlistHtml = html.DropDownList(question.GetQualifiedId(), setOfOptions, "Please select...", new { @class = "superselect disabled" }).ToHtmlString(); 

所以在這裏我們將告訴您「AnswerListValue」對象的集合到一個IEnumerable,併產生從選擇HTML。但是,這使我無法將x.Style放入SELECT OPTION元素中 - 因爲SelectListItem上沒有HtmlAttributes屬性。這就是我想要的SELECT看起來像......

<select id="whatever" name="whatever"> 
    <option value="1" class="mystyle1">val1</option> 
    <option value="2" class="mystyle2">val2</option> 
    <option value="3" class="mystyle3">val3</option> 
</select> 

明顯這裏的答案是讓我自己SelectListItemWithAttributes對象 - 但我無法弄清楚如何創建DropDownListWithAttributes對象,甚至檢查後MVC2源代碼。

你會在這種情況下做什麼?

回答

0

你不需要'創建'你自己的DropDown助手。您需要擴展默認DropDown助手。它非常簡單,這是關於MVC的最好的事情。

我建議你檢查Creating a SelectListItem with the disabled="disabled" attribute的答案以獲得想法。

+0

謝謝nEEbz。那很有意思。其實我已經嘗試了一些非常相似的東西(將html helper中的html加載到xml對象中以供進一步操作),但似乎有些複雜,所以我認爲有更好的方法。 – centralscru 2010-11-23 15:27:33

相關問題