asp.net控件生命周期

在生命周期中将执行一系列处理步骤,这些步骤包括:

•实例化(Instantiate)

控件被页面或另一个控件通过调用它的构造器所实例化。这个步骤之后所列出的阶段,仅当控件加入控件树中才会发生。

•初始化(Initialize)

初始化在传入 Web 请求生命周期内所需的设置。在此阶段,控件树中的页面和全部控件通过默认方式来调用OnInit方法。开发人员可以通过重载OnInit方法,为控件提供初始化逻辑。在其生命周期的这个时候,控件能够安全地访问其置于Controls集合中的子控件,但是它不能访问控件层次中的父控件或其他层次更高的控件(如页面)



•开始跟踪视图状态(Begin Tracking View State)

这个阶段发生在初始化阶段的末尾。在此阶段页面自动调用TrackViewState方法。TrackViewState方法保证在此阶段之后,使用ViewState字典属性而产生的变化保存在控件视图状态中。在大多数情况下,Control基类提供的TrackViewState方法实现已经足够了,只有在控件定义了复杂属性时,才必须重载TrackViewState方法。



•加载视图状态(仅用于回传过程)(Load View State (postback only))

这个阶段发生在回传时,而不是初始请求过程中,在此阶段结束时,就会自动填充控件的 ViewState 属性控件可以重写 LoadViewState 方法的默认实现,以自定义状态还原。



•加载回传数据(仅用于回传过程,为可选项)(Load Postback Data(postback only, optional))

只有在控件通过实现IPostBackDataHandler接口参与了回传数据处理时,这个阶段才发生在回传中。TextBox控件就是一个例子。在这个阶段中,控件必须从已发送的表单数据中,通过实现IPostBackDataHandler借口的LoadPostData方法更新其状态。



•加载(Load)

直到此阶段开始,控件树中的所有控件都已被初始化,并恢复到它们在先前周期最后的状态。OnLoad方法会执行所有请求共有的操作,如设置数据库查询。此时,树中的服务器控件已创建并初始化、状态已还原并且窗体控件反映了客户端的数据。如果需要实现仅在页面初始请求中执行的逻辑,那么实现该逻辑时,应该检查页面的IsPostBack属性



•引发修改事件(仅用于回传过程,为可选项)(Raise Changed Events(postback only, optional))

只有在控件通过实现IPostBackDataHandler接口参与了回传数据处理时,这个阶段才发生在回传中。在此阶段中,控件通过引发事件(如TextBox的TextChanged事件)作为一种信号-----其状态由于回传而改变(引发更改事件以响应当前和以前回发之间的状态更改)。为了参与此阶段,控件必须实现IPostBackDataHandler接口的RaisePostDataChangedEvent方法。



•引发回传事件(仅用于回传过程,为可选项)(Raise Postback Events(postback only, optional))

只有在控件通过实现IPostBackEventHandler接口参与了回传数据处理时,这个阶段才发生在回传中。在此阶段可以通过实现IPostBackEventHandler接口的RaisePostBackEvent方法来实现逻辑,以便把客户端事件映射到服务器端事件。



•预生成(PreRender)

在此阶段中,应该通过重载OnPreRender方法,执行在生成控件之前所需要的任何工作。在生成输出之前执行任何更新,可以保存在预生成阶段对控件状态所做的更改,而在生成阶段所对应的更改则会丢失。



•保存视图状态(Save View State)

如果控件不维持状态,或者它为保存其所有状态信息而使用ViewState字典,那么不必在此阶段期间实现任何附加逻辑。在此阶段期间,页面框架会自动保存ViewState字典。如果需要自定义状态管理,必须通过重载SaveViewState方法来实现自定义状态恢复,这种方法只被EnableViewState属性为true的控件所调用。在此阶段以后任何控件的改变都不会保存在控件的视图状态中。



•生成(Render)

通过这种方法,控件在输出流上通过重载Control的Render方法或WebControl类的rendering方法中的一种,来写标记文本。



•卸载(Unload)

在此阶段中,页面通过实现Page_Unload方法,来执行清除工作。作为控件开发者,应该重载Dispose方法来执行清除。



•释放(Dispose)

在此阶段,应该重载Dispose方法来释放控件所占的全部资源。

 

 

OnInit
TrackViewState
OnLoad
EnsureChildControls
CreateChildControls
OnPreRender
SaveViewState
Render
RenderChildren
OnUnload

试验程序:
using System;
using System.Data;
using System.Data.OleDb;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Web.UI;
using System.IO;
using System.ComponentModel;

namespace ku1
{
 /// <summary>
 /// te 的摘要说明。
 /// </summary>
 [DefaultProperty("Text"),
  ToolboxData("<{0}:te runat=server></{0}:te>")]
 public class te : System.Web.UI.WebControls.WebControl,INamingContainer
 {
  private string text;
 
  [Bindable(true),
   Category("Appearance"),
   DefaultValue("")]
  public string Text
  {
   get
   {
    return text;
   }

   set
   {
    text = value;
   }
  }

  /// <summary>
  /// 将此控件呈现给指定的输出参数。
  /// </summary>
  /// <param name="output"> 要写出到的 HTML 编写器 </param>
  
  protected override void CreateChildControls()
  {
   HttpContext.Current.Response.Write("CreateChildControls<br>"); 
   base.CreateChildControls();
  }
  public override void DataBind()
  {
   HttpContext.Current.Response.Write("DataBind()<br>"); 
   base.DataBind() ;
  }
  
  protected override void AddParsedSubObject(object obj)

  {
   HttpContext.Current.Response.Write("AddParsedSubObject<br>"); 
   base.AddParsedSubObject(obj);
  }
  protected override ControlCollection CreateControlCollection()

  {
   HttpContext.Current.Response.Write("CreateControlCollection<br>"); 
    return base.CreateControlCollection();
  }
  protected override void EnsureChildControls()

  {
   HttpContext.Current.Response.Write("EnsureChildControls<br>"); 
   base.EnsureChildControls();
  }
  public override bool HasControls()

  {
   HttpContext.Current.Response.Write("HasControls<br>"); 
    return base.HasControls();
  }
  protected override void LoadViewState(object savedState)

  {
   HttpContext.Current.Response.Write("LoadViewState<br>"); 
   base.LoadViewState(savedState);
  }
  protected override bool OnBubbleEvent(object source, EventArgs args)
  {
   HttpContext.Current.Response.Write("OnBubbleEvent<br>"); 
    return base.OnBubbleEvent(source,args);
  }
  protected override void OnDataBinding(EventArgs e)

  {
   HttpContext.Current.Response.Write("OnDataBinding<br>"); 
   base.OnDataBinding(e);
  }
  protected override void OnInit(EventArgs e)
  {
   HttpContext.Current.Response.Write("OnInit<br>"); 
   base.OnInit(e);
  }
  protected override void OnLoad(EventArgs e)
  {
   HttpContext.Current.Response.Write("OnLoad<br>"); 
   base.OnLoad(e);
  }
  protected override void OnPreRender(EventArgs e)
  {
   HttpContext.Current.Response.Write("OnPreRender<br>"); 
   base.OnPreRender(e);
  }
  protected override void OnUnload(EventArgs e)
   {
    HttpContext.Current.Response.Write("OnUnload<br>"); 
    base.OnUnload(e);
   }
  protected override void RemovedControl(Control control)

    {
     HttpContext.Current.Response.Write("RemovedControl<br>"); 
     base.RemovedControl(control);
    }
  protected override void Render(HtmlTextWriter writer)
  {
   HttpContext.Current.Response.Write("Render<br>"); 
   base.Render(writer);
  }
  protected override void RenderChildren(HtmlTextWriter writer)
  {
   HttpContext.Current.Response.Write("RenderChildren<br>"); 
   base.RenderChildren(writer);
  }
  protected override object SaveViewState()

  {
   HttpContext.Current.Response.Write("SaveViewState<br>"); 
    return base.SaveViewState();
  }
  protected override void TrackViewState()
  {
   HttpContext.Current.Response.Write("TrackViewState<br>"); 
   base.TrackViewState();
  }

 }
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值