惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

I
Intezer
The Register - Security
The Register - Security
博客园 - 三生石上(FineUI控件)
博客园_首页
量子位
Hugging Face - Blog
Hugging Face - Blog
Engineering at Meta
Engineering at Meta
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Last Week in AI
Last Week in AI
博客园 - 【当耐特】
N
Netflix TechBlog - Medium
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
GbyAI
GbyAI
D
Docker
M
MIT News - Artificial intelligence
Jina AI
Jina AI
The GitHub Blog
The GitHub Blog
V
Visual Studio Blog
T
Tailwind CSS Blog
S
SegmentFault 最新的问题
Microsoft Azure Blog
Microsoft Azure Blog
G
Google Developers Blog
有赞技术团队
有赞技术团队
IT之家
IT之家
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Troy Hunt's Blog
Cyberwarzone
Cyberwarzone
Recorded Future
Recorded Future
H
Help Net Security
L
LINUX DO - 热门话题
罗磊的独立博客
Google DeepMind News
Google DeepMind News
NISL@THU
NISL@THU
SecWiki News
SecWiki News
T
Threat Research - Cisco Blogs
T
Threatpost
Cloudbric
Cloudbric
G
GRAHAM CLULEY
S
Security @ Cisco Blogs
Hacker News - Newest:
Hacker News - Newest: "LLM"
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
P
Proofpoint News Feed
V2EX - 技术
V2EX - 技术
L
LangChain Blog
The Cloudflare Blog
雷峰网
雷峰网
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
B
Blog
T
The Blog of Author Tim Ferriss

博客园 - 飞得更高

MPI并行编程系列之五:图的单源最短路径算法 MPI并行编程系列之四:KMP算法及并行化 MPI并行编程系列三:并行正则采样排序PSRS MPI并行编程系列 MPI并行编程系列二:快速排序 MPI并行编程系列一:枚举排序 c#基础(一)之内存管理 用Windows Live Writer 首发Blog 一个被我长期忽略的一个问题:验证控件与Button的OnClientClick事件 远程数据自动导入的设计与实现 LINQ TO SQL 复杂查询之Queries with local collections are not supported linq下数据库接口的定义和实现(linq to SQL) sql 常用函数总结 面对恶意操作,勇敢说不------定制服务器端验证器 验证控件失效,求助解决方案 js浮点运算bug的解决办法 c# 委托实例 回车与服务器控件Button的Click事件 javascript:Web页面中的所有控件清空 - 飞得更高 - 博客园
从页面的生命周期事件到页面基类(PageBase类)的编写
飞得更高 · 2008-10-25 · via 博客园 - 飞得更高

    我们一直在服务器端的代码中使用各种事件,而这些事件大多是专用于特定的服务器控件的。我们可以在这些事件中定义我们所需要的操作,如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

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