惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

W
WeLiveSecurity
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Hacker News - Newest:
Hacker News - Newest: "LLM"
Cloudbric
Cloudbric
V
Visual Studio Blog
L
LangChain Blog
A
About on SuperTechFans
B
Blog
T
Tenable Blog
罗磊的独立博客
Hacker News: Ask HN
Hacker News: Ask HN
Blog — PlanetScale
Blog — PlanetScale
博客园 - 三生石上(FineUI控件)
The Register - Security
The Register - Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
P
Palo Alto Networks Blog
U
Unit 42
WordPress大学
WordPress大学
D
Darknet – Hacking Tools, Hacker News & Cyber Security
N
News and Events Feed by Topic
T
Threat Research - Cisco Blogs
C
Check Point Blog
Security Latest
Security Latest
M
MIT News - Artificial intelligence
Application and Cybersecurity Blog
Application and Cybersecurity Blog
宝玉的分享
宝玉的分享
P
Proofpoint News Feed
NISL@THU
NISL@THU
Forbes - Security
Forbes - Security
S
Securelist
Security Archives - TechRepublic
Security Archives - TechRepublic
Hugging Face - Blog
Hugging Face - Blog
aimingoo的专栏
aimingoo的专栏
Latest news
Latest news
GbyAI
GbyAI
T
Troy Hunt's Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
L
LINUX DO - 热门话题
V2EX - 技术
V2EX - 技术
小众软件
小众软件
Google DeepMind News
Google DeepMind News
K
Kaspersky official blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
O
OpenAI News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
N
Netflix TechBlog - Medium
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Google DeepMind News
Google DeepMind News
P
Proofpoint News Feed

博客园 - 心利

DocOptimizer 0.9.0 Beta Released SharePoint GroupedItemPicker Control Drag & Drop between SharePoint Document libraries Improving SharePoint User Experience With JQuery-Client Side Form Validate SharePoint How To:定位错误:“An SPRequest object was not disposed .." SharePoint Tips and Tricks --如何用JS向PeopleEditor填充数据 SharePoint Tips and Tricks -- Ribbon,People Editor 使用T4为数据库自动生成实体类(C#) (Tips&Tricks)用客户端模板精简JavaScript代码 (Tips &Tricks)如何为Windows Mobile 创建拨号连接--C# System.Xml FAQ Part 1 Windows Ce vs Windows Mobile Asp.net程序中生成Excel报表 My Page StartKit项目概览 做一个更好的程序员 .Net类库中实现的HashTable 为Asp.net控件写单元测试(ViewState) ViewState 简述一(With Example And Apply to Asp.net) 桌面背景:rss新闻阅读器(图)
使用Control Adapters优化Asp.net控件
心利 · 2007-06-01 · via 博客园 - 心利
 

有些时候Asp.net 控件默认状态下生成的html代码,不能满足一些特定的需要。比如

我们想让用户做一些选择,可以很容易的用如下代码实现

<asp:CheckBoxList runat="server">

   <asp:ListItem Text="One" />

   <asp:ListItem Text="Two" />

   <asp:ListItem Text="Three" />

</asp:CheckBoxList>


默认状态下CheckBoxList会将这些选项放在一个table标签里,但是也许有个别情况不适合使用table,而需要一个un-ordered list(ul)。当然我们可以重新写一个继承于CheckBoxList的控件,但是使用Control Adpater会更容易,并且还有一些额外的好处。

首先看一下实现:

1 写一个继承自WebControlAdapter的类,如下

using System;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.Adapters;

public class RadioButtonListAdapter : WebControlAdapter

{

   protected override void Render(HtmlTextWriter writer)

   {

       ListControl targetControl = this.Control as ListControl;

       // If the control that this adapter is pointing to is not

       // a ListControl (RadioButtonList or CheckBoxList) then

       // we don't want to change the rendering.

       if (targetControl == null || targetControl is IRepeatInfoUser == false)

       {

base.Render(writer);

           return;

       }

       writer.WriteBeginTag("ul");

       if (targetControl.CssClass.Length > 0)

       {

         writer.WriteAttribute("class", targetControl.CssClass);

       }

       writer.Write(">");

       IRepeatInfoUser repeaterInfo = (IRepeatInfoUser)this.Control;

       for (int i = 0; i < targetControl.Items.Count; i++)

       {

           writer.WriteFullBeginTag("li");

           repeaterInfo.RenderItem(ListItemType.Item, i, new RepeatInfo(), writer);

           writer.WriteEndTag("li");

       }

       writer.WriteEndTag("ul");

   }

}


2,新建一个asp.net 文件夹 App_Browsers,在其中添加一个.browser文件,添加如下内容

<browsers>

<browser refID="Default">

       <controlAdapters>

           <adapter controlType="System.Web.UI.WebControls.CheckBoxList"

              adapterType="RadioButtonListAdapter" />

           <adapter controlType="System.Web.UI.WebControls.RadioButtonList"

              adapterType="RadioButtonListAdapter" />

       </controlAdapters>

   </browser>

</browsers>


好了,一切ok。注意到了没有?我们并没有改变先前的asp.net代码.这就是个非常重要的好处啊。

Ps : Most of information and code of this article come from Timothy Khouri's

Cool website SingingEels