在我们自定义控件的时候,很多地方需要我们自己去写.
 
这篇文章就常用到的内容和方法进行介绍
 
一、任何让生成的控件具有自己的TagPrefix?
如:FreeTextBox控件,当你在工具栏把它拖入页面时,你可以看下HTML代码,它代码如下:<FTB:FreeTextBox id = "FreeTextBox1" ......></FTB>
TagPrefix说的就是这个FTB。
 
其实在开发的时候非常见到,只需要在命名空间上方加入代码:
[assembly:TagPrefix("FreeTextBoxControls", "FTB")]就可以了。
例如:FreeTextBox 控件的做法就是这样的
[assembly:TagPrefix("FreeTextBoxControls", "FTB")]就可以了。
namespace FreeTextBoxControls
 
二、一般来说自定义控件需要继承几个接口
public class FreeTextBox: WebControl,INamingContainer,IPostBackDataHandler
下面一一进行讲解
1、WebControl,Control都可以
这表明是从WebControl或Control继承的。
=====================================================
2、INamingContainer
MSDN给出的解释为:标识在 Page 对象的控件层次结构内创建新 ID 命名空间的容器控件。这仅是一个标记接口。
那么作用是什么?
避免同一页上的命名冲突(说白的就是:假如你的页面中拖入两个FreeTextBox,你会发行它两个FreeTextBox的ID都是不一样的,自动的生成不一样的ID)。
=====================================================
3、IPostBackDataHandler
定义 ASP.NET 服务器控件为自动加载回发数据而必须实现的方法。
当要使编程方式实现的控件实现数据自动回发时,就必须要实现这个接口
 
通俗的解释:你开发的自定义控件需要数据回发时,需要用到此接口

公共方法
LoadPostData 当由类实现时,为 ASP.NET 服务器控件处理回发数据。
RaisePostDataChangedEvent 当由类实现时,用信号要求服务器控件对象通知 ASP.NET 应用程序该控件的状态已更改。
 
#region================LoadPostData==========================
  public bool LoadPostData(String postDataKey, NameValueCollection values)
  {   
   string PresentValue = this.ViewStateText;
   string PostedValue = values[base.ID];
   if (!PresentValue.Equals(PostedValue))
   {
    this.Text = PostedValue;
    return true;
   }
   else
   {
    return false;
   }
  }
  #endregion 
 
#region================RaisePostDataChangedEvent==========================
  public void RaisePostDataChangedEvent()
  {
   // nothing happens for text changed
  }
  #endregion
 
当然这些都是最基本的知识,更多的知识在后期我会继续讲述。
 
posted on 2007-01-30 06:25  kingeric  阅读(341)  评论(0编辑  收藏  举报