asp.net-mvc – 使用disabled =“disabled”属性创建一个SelectListItem

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 使用disabled =“disabled”属性创建一个SelectListItem前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我没有看到通过HtmlHelper创建一个将会吐出以下HTML的SelectListItem的方法
<option disabled="disabled">don't click this</option>

唯一的物业SelectListItem有:

new SelectListItem{
  Name = "don't click this",Value = string.Empty,Selected = false
}

我看到的唯一选择是

>将SelectListItem子类添加到Enabled属性获取视图的值
>不使用HTML helper for DropDownList
>创建一个新的HtmlHelper扩展,接受我的新EnablableSelectList并添加我的disabled属性

解决方法

这是我可以尝试在完全重新创建帮手之前。基本的想法是,你从帮助者获得的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());
    }
}

猜你在找的asp.Net相关文章