jiahaipeng

我要飞得更高
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

    我们一直在服务器端的代码中使用各种事件,而这些事件大多是专用于特定的服务器控件的。我们可以在这些事件中定义我们所需要的操作,如Button的Click事件。但是我们还希望在创建的删除页面时执行某些操作,幸运的是,ASP.NET页面在页面的生命周期内给我们定义了许多事件来完成这些操作。而这也为我们PageBase类的编写提供了条件。

    一、页面生命周期的事件

    在页面的生命周期内,定义了如下事件:

    PreInit,Init,InitComplete,PreLoad,Load,LoadComplete,PreRender,PreRenderComplete和UnLoad事件,在每一个事件中,我们都可以根据需要来定义我们自己的操作。现把几个比较常用和重要的页面事件所完成的操作归结如下:

  1. Page_Init:出现此事件期间,您可以初始化值或连接可能具有的任何事件处理程序。
  2. Page_Load:出现此事件期间,您可以执行一系列的操作来首次创建 ASP.NET 页面或响应由投递引起的客户端事件。在此事件之前,已还原页面和控件视图状态。使用 IsPostBack 页面属性检查是否为首次处理该页面。如果是首次处理,请执行数据绑定。此外,请读取并更新控件属性。
  3.  Page_DataBind:在页面级别调用 DataBind 方法时,将引发 DataBind 事件。如果在单个控件上调用 DataBind,则它只激发它下面控件的 DataBind 事件。
  4.  Page_Unload:完成页面呈现之后,将激发 Page_Unload 事件。此事件是执行最终清理工作的合适位置。这包括清理打开的数据库连接、丢弃对象或关闭打开的文件等操作。

    有了这些事件和在事件内需要定义的操作后,我们就可以编写我们的PageBase类了。

    二、PageBase类的编写

    在编写PageBase类之前,要清楚所有页面的公共行为和属性。以一般的信息管理系统为例,页面的公共行为和属性一般如下:

  1. 取得数据库
  2. 判断用户是否登陆
  3. 取得当前用户,并判断用户的权限。
  4. 初始化页面的查询条件
  5. 加载页面的样式表(如果页面需要动态加载样式表)

    有了这些,我们开始编写我们的PageBase类,当然,这个类必须继承于System.UI.Web.Page类。

    1>定义页面的属性,我们将数据库和当前用户定义为页面的属性,我们还可以取得页面的HTTP响应和判断页面在执行过程中是由使用了事务(可重写)。代码如下:

Code

    2>重写页面的事件,并在这些事件中定义我们的操作。,在这个PageBase类中,重写了InitComplete,Load,UnLoad和Dispose事件。

    在InitComplete事件中,取得了当前用户,判断用户是否登陆和初始化查询条件(可重写),代码如下:

Code

   在这个事件中,我们定义了一个虚方法InitialQueryCondition(),可以根据需要在页面中重写这个方法。

   在Load事件中,我们判断了用户的权限,加载了页面的样式表,完成了页面数据绑定和定义了当页面第一次加载时的方法(可重写),代码如下:

 

Code

 

  在Unload和Dispose事件中,定义了提交事务和断开数据库连接操作,代码如下:

 

Code

     到目前为止,我们根据我们自己的需要完成了页面的基类,当然,这个基类不是固定的,根据不同的需要可以在不同的事件中定义不同的操作。