柚子Nan--回归原点

Everything can be as easy as you like or as complex as you need.
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

如何能使一个组件自动的支持任意增加的属性

Posted on 2004-07-24 11:29  柚子Nan  阅读(915)  评论(1)    收藏  举报

 

1.         构建一个简单的组件:

让他显示一个默认的粗体Hello文本!

public class SimpleLabel:Control

{  

    protected override void Render(HtmlTextWriter writer)

    {

        writer.Write("<b>Hello<b>");

        base.Render (writer);

    }

}

2.         进一步,添加两个属性用来保存一些有意义的数据,一个UserName,一个Tag

 

public class SimpleLabel:Control

{

  string strUserName;

  object objTag;

 

  protected override void Render(HtmlTextWriter writer)

  {

      writer.Write("<b>Test<b>");

      base.Render (writer);

  }

public string UserName

  {

      get{return strUserName;}

      set{ strUserName = value;}

  }

public object Tag

  {

      get{return objTag;}

      set{ objTag = value;}

  }

}

3.         再进一步,如果这样子使用这个控件将会失败!

<cc1:SimpleLabel id="SimpleLabel1" KoHello="OK" runat="server"></cc1:SimpleLabel>

因为SimpleLabel并没有定义属性KoHello。可以采取如下的改进措施:使用IAttributeAccessor接口,这样就可以自由使用属性而不必在空间中预先定义了!

public class SimpleLabel:Control,IAttributeAccessor

{

  protected override void Render(HtmlTextWriter writer)

  {

      writer.Write("<b>Test<b>");

      base.Render (writer);

  }

  string IAttributeAccessor.GetAttribute(string name)

  {

      return "";

  }

  void IAttributeAccessor.SetAttribute(string name,string value)

  {

  }  

}

 

That’s All!

学习自《深入剖析Asp.net组件编程》