zoukankan      html  css  js  c++  java
  • 使用Control Adapters优化Asp.net控件

     

     

    有些时候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 

     

     

     

     

     

     

     

  • 相关阅读:
    JVM系列四:生产环境参数实例及分析【生产环境实例增加中】
    JVM系列三:JVM参数设置、分析
    JVM系列二:GC策略&内存申请、对象衰老
    JVM系列一:JVM内存组成及分配
    windows下揪出java程序占用cpu很高的线程 并找到问题代码 死循环线程代码
    微信小程序使用字体图标
    Jetson tx2 串口通信
    categorical[np.arange(n), y] = 1 IndexError: index 2 is out of bounds for axis 1 with size 2
    cannot import name '_imaging' 报错
    VS2015 opencv 无法打开文件“opencv_calib3d330d.lib”
  • 原文地址:https://www.cnblogs.com/osamede/p/767382.html
Copyright © 2011-2022 走看看