首页 > 编程 > .NET > 正文

使用Control Adapters优化Asp.net控件

2024-07-10 13:08:24
字体:
来源:转载
供稿:网友

有些时候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代码.这就是个非常重要的好处啊。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表