Ответ 1
Это то, что я могу попробовать, прежде чем полностью воссоздать помощника. Основная идея заключается в том, что 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());
}
}