Creating a SelectListItem with the disabled=“disabled” attribute

后端 未结 5 962
感情败类
感情败类 2020-12-05 07:01

I\'m not seeing a way to create, via the HtmlHelper, a SelectListItem that will spit out the following HTML:

5条回答
  •  一生所求
    2020-12-05 07:34

    This is something I might try before recreating the helper completely. The basic idea is that the Html you get from the helper should be well formed, so it should be safe to parse. So you can build on that idea by making your own extension that uses the existing extension but adds the functionality to disable the items.

    Something like this might do (totally untested)

    public class CustomSelectItem : SelectListItem
    {
        public bool Enabled { get; set; }
    }
    
    public static class CustomHtmlHelpers
    {
        public static MvcHtmlString MyDropDownList(this HtmlHelper html, IEnumerable selectList)
        {
            var selectDoc = XDocument.Parse(html.DropDownList("", (IEnumerable)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());
        }
    }
    

提交回复
热议问题