【问题标题】:How can I extend MVC2 DropDownList/ListBox helpers to include custom attributes on the select option elements?如何扩展 MVC2 DropDownList/ListBox 助手以在选择选项元素上包含自定义属性?
【发布时间】:2011-05-14 12:46:29
【问题描述】:

我一直坚持我认为在 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 对象 - 但我无法弄清楚如何创建 DropDownListWithAttributes 对象,即使在检查了 MVC2 源代码之后也是如此。

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

【问题讨论】:

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


    【解决方案1】:

    您无需“创建”您自己的 DropDown 助手。您需要扩展默认的 DropDown Helper。它非常简单,这就是 MVC 的优点。

    我建议您查看Creating a SelectListItem with the disabled="disabled" attribute 的答案以了解一下。

    【讨论】:

    • 感谢 nEEbz。那很有意思。实际上我已经尝试过一些非常相似的方法(将 html 帮助程序中的 html 加载到 xml 对象中以进行进一步操作),但它似乎有点令人费解,所以我认为有更好的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 2020-07-29
    • 2015-02-06
    相关资源
    最近更新 更多