使用disabled ="disabled"属性创建SelectListItem

Mar*_*ark 26 asp.net-mvc html-helper

我没有看到一个方法来创建,通过HtmlHelper,一个SelectListItem是会吐出下面的HTML:

<option disabled="disabled">don't click this</option>
Run Code Online (Sandbox Code Playgroud)

唯一的属性SelectListItem是:

new SelectListItem{
  Name = "don't click this",
  Value = string.Empty,
  Selected = false
}
Run Code Online (Sandbox Code Playgroud)

我看到的唯一选择是

  1. 子类化SelectListItem以添加Enabled属性以获取视图的值
  2. 不使用DropDownListHTML帮助程序
  3. 创建一个HtmlHelper接受我的新扩展EnablableSelectList并添加我的disabled属性的新扩展.

Mih*_*üür 23

Disabled自ASP.NET MVC 5.2以来,该属性受支持:

new SelectListItem {
    // ...
    Disabled = true
}
Run Code Online (Sandbox Code Playgroud)

请参阅API参考.

  • 这也是本世纪的笑话!简而言之,它对名为`DropdownList`的延迟助手没有影响!:) (4认同)
  • @Mrchief你需要使用IEnumerable <SelectListItem>来禁用禁用的标志,而不是SelectList.请参阅:http://stackoverflow.com/questions/29424365/net-mvc-5-2-3-how-to-create-a-disabled-option-out-of-selectlistitem (3认同)

Jab*_*Jab 20

在完全重新创建帮助程序之前,我可能会尝试这种方法.基本的想法是你从帮助程序得到的Html应该很好地形成,所以它应该是安全的解析.因此,您可以通过创建使用现有扩展的自己的扩展来增加该想法,但添加了禁用项目的功能.

这样的事可能会做(完全未经测试)

public class CustomSelectItem : SelectListItem
{
    public bool Enabled { get; set; }
}

public static class CustomHtmlHelpers
{
    public static MvcHtmlString MyDropDownList(this HtmlHelper html, IEnumerable<CustomSelectItem> selectList)
    {
        var selectDoc = XDocument.Parse(html.DropDownList("", (IEnumerable<SelectListItem>)selectList).ToString());

        var options = from XElement el in selectDoc.Element("select").Descendants()
                                    select el;

        foreach (var item in options)
        {
            var itemValue = item.Attribute("value");
            if (!selectList.Where(x => x.Value == itemValue.Value).Single().Enabled)
                item.SetAttributeValue("disabled", "disabled");
        }

        // rebuild the control, resetting the options with the ones you modified
        selectDoc.Root.ReplaceNodes(options.ToArray());
        return MvcHtmlString.Create(selectDoc.ToString());
    }
}
Run Code Online (Sandbox Code Playgroud)


sta*_*ata 5

Clientside选项:例如,如果你给你的下拉列表一个类'custom'和那些应该是不可选择的项值-1(例如),那么你可以这样做:

$('select.custom option[value=-1]').each(function () {
    $(this).attr("disabled", "disabled");
});
Run Code Online (Sandbox Code Playgroud)