Создание SelectListItem с отключенным = “отключенный” атрибут

Я не вижу способ создать, через HtmlHelper, a SelectListItem это выложит следующий HTML:


Единственные свойства SelectListItem имеет:

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

Единственная опция, которую я вижу, к

  1. Разделите на подклассы SelectListItem добавить Enabled свойство для получения значения к представлению
  2. Не используют помощника HTML для DropDownList
  3. Создайте новое HtmlHelper расширение, которое принимает мое новое EnablableSelectList и добавляет мой disabled атрибут.

26
задан Mark 16 April 2010 в 17:57
поделиться

2 ответа

Это то, что я мог бы попробовать, прежде чем полностью воссоздать помощника. Основная идея заключается в том, что 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());
    }
}
20
ответ дан 28 November 2019 в 07:10
поделиться

Если все, что вы пытаетесь сделать, это запретить пользователю выбирать определенное значение из списка, это кажется более простым и экономичным способом сделать это - использовать проверку ввода. Что вы вполне можете делать в любом случае, если хотите убедиться, что они сделали выбор с самого начала.

0
ответ дан 28 November 2019 в 07:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: