带OptionGroup支持的ASP.NET DropDownList

分享于 

4分钟阅读

Web开发

  繁體

介绍

ASP.NET 2.0,因为所有的声音和声音,缺乏奇怪的功能,因为完全未知的原因。 一个值得注意的遗漏是 OptionGroup ( <optgroup> ) DropDownList 控件中的支持。 对于那些不熟悉 <optgroup> 元素,它是XHTML标准的一部分,并且具有categorising项在 <选择> ,如下图所示。

Option Groups

当我开始在 ASP.NET 中寻找解决方案时,我发现了一些关于提供可以行解决方案的文章。 CodeProject成员想出了一个简洁干净的解决方案插件,但是看起来很像很多代码,我相信有一个更容易的方法来解决这个问题。 在阅读了一些评论之后,它变成了一个控制适配器。 控件适配器是 ASP.NET 2.0中新的,允许开发者覆盖任何控件的渲染行为,非常强大的内容 ! 这里外,控制适配器与浏览器文件一起使用,因这里特定的浏览器可以能是针对的。 有了这些知识,解决方案就变得简单了。 附件下载包含在你自己的项目中实现这个解决方案所必需的文件,但是对于子孙,我将它粘贴到这里。

publicclass DropDownListAdapter : 
 System.Web.UI.WebControls.Adapters.WebControlAdapter {
 protectedoverridevoid RenderContents(HtmlTextWriter writer) {
 DropDownList list = this.Control as DropDownList;
 string currentOptionGroup;
 List<string> renderedOptionGroups = new List<string>();
 foreach(ListItem item in list.Items) {
 if(item.Attributes["OptionGroup"] == null) {
 RenderListItem(item, writer);
 } else {
 currentOptionGroup = item.Attributes["OptionGroup"];
 if(renderedOptionGroups.Contains(currentOptionGroup)) {
 RenderListItem(item, writer);
 } else {
 if(renderedOptionGroups.Count >0) {
 RenderOptionGroupEndTag(writer);
 }
 RenderOptionGroupBeginTag(currentOptionGroup, 
 writer);
 renderedOptionGroups.Add(currentOptionGroup);
 RenderListItem(item, writer);
 }
 }
 }
 if(renderedOptionGroups.Count >0) {
 RenderOptionGroupEndTag(writer);
 }
 }
 privatevoid RenderOptionGroupBeginTag(string name, 
 HtmlTextWriter writer) {
 writer.WriteBeginTag("optgroup");
 writer.WriteAttribute("label", name);
 writer.Write(HtmlTextWriter.TagRightChar);
 writer.WriteLine();
 }
 privatevoid RenderOptionGroupEndTag(HtmlTextWriter writer) {
 writer.WriteEndTag("optgroup");
 writer.WriteLine();
 }
 privatevoid RenderListItem(ListItem item, 
 HtmlTextWriter writer) {
 writer.WriteBeginTag("option");
 writer.WriteAttribute("value", item.Value, true);
 if(item.Selected) {
 writer.WriteAttribute("selected", "selected", false);
 }
 foreach(string key in item.Attributes.Keys) {
 writer.WriteAttribute(key, item.Attributes[key]);
 }
 writer.Write(HtmlTextWriter.TagRightChar);
 HttpUtility.HtmlEncode(item.Text, writer);
 writer.WriteEndTag("option");
 writer.WriteLine();
 }
}

asp  asp-net  SUP  dropdownlist  
相关文章