如何扩展MVC2 DropDownList / ListBox助手以在select选项元素上包含自定义属性?

时间:2010-11-23 15:06:56

标签: asp.net-mvc asp.net-mvc-2

我坚持认为ASP.Net MVC2中的一个非常简单的任务。

我需要将背景颜色应用于某些SELECT OPTION元素。为了生成下拉列表,我们使用Html.DropDownList和Html.ListBox html助手,理想情况下我想继续使用这些,所以我不必处理从表单集合中重新绑定选定的项目时表单已提交并重新显示。

由于我不会进入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,并从中生成SELECT 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对象 - 但即使在检查MVC2源代码之后,我也无法弄清楚如何创建DropDownListWithAttributes对象。

在这种情况下你会做什么?

1 个答案:

答案 0 :(得分:0)

您不需要“创建”自己的DropDown助手。您需要扩展默认的DropDown Helper。它非常简单,这对MVC来说是最好的。

我建议你查看Creating a SelectListItem with the disabled="disabled" attribute的答案以获得一个想法。