.Net MVC 5.2.3:如何从SelectListItem中创建禁用选项?

时间:2015-04-02 23:55:41

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

我正在尝试创建一个下拉列表,其中禁用了一些选项,因此无法选择它们。这是我的代码:

var places = new SelectList(new List<SelectListItem>
{
    new SelectListItem { Selected = false, Text = "Virgin Islands", Value = "Virgin Islands"},
    new SelectListItem { Selected = false, Text = "", Value = "", Disabled= true},
    new SelectListItem { Selected = false, Text = "Canada", Value = "Canada", Disabled= true},
    new SelectListItem { Selected = false, Text = "", Value = "", Disabled= true},
    new SelectListItem { Selected = false, Text = "Other", Value = "Other"},
}, "Value", "Text");

但是,为禁用的SelectListItem生成的HTML仅仅是:

<option value=""></option>

如何生成以下HTML

<option disabled="disabled"></option>
来自SelectListItem?

谢谢!

2 个答案:

答案 0 :(得分:4)

Disabled属性仅在您使用IEnumerable<SelectListItem>而非SelectList时才会得到尊重(在SelectList构造函数中,您只需设置Value的属性}和Text)无论如何,当帮助者只接受IEnumerable<SelectListItem>

时,创建SelectList然后从中创建IEnumerable<SelectListItem>几乎没有意义
var places = new List<SelectListItem>
{
    new SelectListItem { Selected = false, Text = "Virgin Islands", Value = "Virgin Islands"},
    new SelectListItem { Selected = false, Text = "", Value = "", Disabled= true},
    ....
};

然后在帮手

@Html.DropDownList(m => m.YourProperty, model.places) // or (IEnumerable<SelectListItem>)ViewBag.places

旁注:SelectList确实有一个重载的构造函数,它将IEnumerable disabledValues作为参数(refer documentation

答案 1 :(得分:2)

您没有考虑Disabled的{​​{1}}属性,所以 -

将模型作为typeof

返回
SelectListItem

而不是

IEnumerable<SelectListItem>

然后绑定为 -

SelectList

希望这有帮助。