我没有看到通过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()); } }