上篇文章写到ASP.NET页面的生命周期。详见:http://www.cnblogs.com/zhaozhan/archive/2009/06/21/1507740.html。

Page_PreInit事件来执行以下操作:检查IsPostBack属性来确定是不是第一次处理该页,创建或重新创建动态控件,动态设置主控页,动态设置Theme属性,读取或设置配置文件的属性值。如果请求回发请求,则空间的值尚未从视图状态还原,如果在此阶段设置控件属性,则其值可能在下一时间中被重写。

Page_Init事件中所有的控件都设为默认的状态,但此时视图状态没有被恢复。这意味着Page_Init不应该用来处理服务器控件的值和状态。

InitComplete事件由Page对象引发。使用该事件来处理要求先完成所有初始化工作的任务。

Page_PreLoad:如果需要在Load事件之前对页或控件执行处理使用。在Page引发该事件后,它会为自身和所有控件加载视图状态,然后会处理Request实例包括的任何回发数据。

Page_Load事件是ASP.NET编程中最常用的时间。它在Page_Init事件之后调用。Page_Load事件和Page_Init事件之间的主要差别是到触发Page_Load事件时。所有的服务器空间的视图状态都将被恢复。这使得该时间可以很理想地用于操纵空间并准备页面的内容,然后再呈现给客户端。

控件事件在页面初始化阶段之后进行处理。来处理特定控件的事件,如Button控件的Click事件或TextBox控件的TextChanged事件。在回发请求中,如果页包含验证程序控件,请在执行任何处理之前Page和各个验证控件的IsValid属性。

LoadComplete事件来处理加载页面上的所有其他控件的任务。

PreRender事件对页或其空间的内容进行最后的更改。

SaveStateComplete:在该事件发生前,已针对页和所有控件保存了ViewState。将忽略此时对页或控件进行的任何更改。

使用该事件执行满足以下条件的任务:要求已经保存了视图状态,但未对控件进行任何更改。

Render:这不是事件;在处理的这个阶段,Page对象会在每个控件上调用此方法。所有 ASP.NET Web 服务器控件都有一个用于写出发送给浏览器的控件标记的Render方法。如果创建自定义控件,通常要重写此方法以输出控件的标记。不过,如果自定义控件只合并标准的 ASP.NET Web 服务器控件,不合并自定义标记,则不需要重写Render方法。用户控件(.ascx 文件)自动合并呈现,因此不需要在代码中显式呈现该控件。

UnLoad事件首先针对每个控件发生,继而针对该页发生。在控件中,使用该事件对特定控件执行最后清理,如关闭控件特定数据库连接。

对于页自身,使用该事件来执行最后清理工作,如:关闭打开的文件和数据库连接,或完成日志记录或其他请求特定任务。在卸载阶段,页及其控件已被呈现,因此无法对响应流做进一步更改。如果尝试调用方法(如Response.Write 方法),则该页将引发异常。

下面做个简单的Demo:

在下面的例子,创建一个投票的Web窗体,允许用户投票选择喜爱的颜色。

   <form id="form1" runat="server"><div style=" color:Maroon; font-size:5; font-weight:bold;"><h2>Vote For Your Favorite Color!</h2><asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" BorderColor="#DEDA84"BorderStyle="None" CellPadding="3" CellSpacing="2" BorderWidth="1px" BackColor="#DEBA84"><SelectedRowStyle Font-Bold="true" ForeColor="White" BackColor="#738A9C" /><RowStyle ForeColor="#8C4510" BorderColor="#FFF7E7" /><HeaderStyle  Font-Bold="true" ForeColor="White" BackColor="#A55129"/><FooterStyle ForeColor="#8C4510" BackColor="#F7DFB5" /><Columns><asp:BoundField DataField="Key" HeaderText="Name" /><asp:BoundField DataField="Value" HeaderText="# of Votes" /><asp:ButtonField Text="Vote" ButtonType="Button" HeaderText="Vote" CommandName="Vote" /></Columns></asp:GridView></div><asp:Button ID="btnReset" runat="server" Text="Reset Votes" /></form>
 
    在Page_Load事件中:或者把所有的投票数设为初始的零值,或者从应用程序的缓存中检索投票数。
    protected Hashtable VoteTally;protected string[] ColorList = { "Red","Green","Blue","Black","White"};protected void Page_Load(object sender, EventArgs e){VoteTally = new Hashtable();foreach (string strKey in ColorList){if (Cache.Get(strKey) == null)VoteTally.Add(strKey, 0);elseVoteTally.Add(strKey, Cache.Get(strKey));}}
 
   在页面卸载时,把这些值缓存起来,是页面的所有其他用户也能投票。
   protected void Page_UnLoad(object sender, EventArgs e){foreach (string strKey in ColorList){Cache.Insert(strKey, VoteTally[strKey]);}}
 
   当用户点击某一行的命令按钮投票选择一种颜色时,触发RowComand。这是一个事件起泡(event bubbling),容器控件中的一个子控件引起容器控件的一个事件被触发。控件事件是在Page_Load事件触发之后触发的。
    protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e){if (e.CommandName == "Vote"){int id = Convert.ToInt32(e.CommandArgument);string strKey = GridView1.Rows[id].Cells[0].Text.ToString();VoteTally[strKey] =(int) VoteTally[strKey] + 1;}}
 
    在Page_PreRender事件期间把数据源绑定到GridView。在PreRender事件绑定的好处是可以清除两次绑定数据的情况(一次在Page_Load中,一次在RowComand中),通过把绑定放到Page_PreRender中,只需把绑定数据的代码放到一个地方,它可以覆盖所有的情况。
    private void Page_PreRender(object sender, EventArgs e){GridView1.DataSource = VoteTally;GridView1.DataBind();}
 
    清除所有的缓存。重新投票计数。
    protected void btnReset_Click(object sender, EventArgs e){foreach (string strKey in ColorList){VoteTally[strKey] = 0;Cache.Insert(strKey, 0);}}
 
    页面的显示效果如下:
     
 
 
   在Global.asax设置Application_BeginRequest和Application_EndRequest方法。统计页面时间。
   void Application_BeginRequest(object sender, EventArgs e){Application[Request.UserHostAddress.ToString()] = DateTime.Now;}void Application_EndRequest(object sender, EventArgs e){DateTime sTime = (DateTime)Application[Request.UserHostAddress.ToString()];Application.Remove(Request.UserHostAddress.ToString());Response.Write("<hr/>");Response.Write("Total Page Processing Time=");Response.Write((DateTime.Now.Ticks-sTime.Ticks)/1000000.0);Response.Write("Seconds");}
 
    
 
    

转载于:https://www.cnblogs.com/zhaozhan/archive/2009/06/21/1507817.html

ASP.NET页面——页面事件相关推荐

  1. 【转】ASP.NET中页面传值

    http://www.cnblogs.com/wenly/archive/2008/06/10/1216678.html 一.目前在ASP.NET中页面传值共有这么几种方式: 1.表单提交,    & ...

  2. Asp.Net异步页面处理(转)

    原文地址: http://www.blogcn.com//User8/flier_lu/blog/27401974.html 与 ASP.NET 1.0 相比,ASP.NET 2.0 的各方面改进可以 ...

  3. ASP.NET Web 页面生命中的一天

    ASP.NET Web 页面生命中的一天  Dino Esposito Wintellect 2003 年 8 月 适用于: Microsoft® ASP.NET 摘要:了解为 ASP.NET Web ...

  4. ASP.NET Web 页面生命历程中的一天

    地址:https://msdn.microsoft.com/zh-cn/library/aa479007.aspx 发布日期 : 4/1/2004| 更新日期 : 4/1/2004 ASP.NET W ...

  5. (转)教你记住ASP.NET WebForm页面的生命周期

    对于ASP.NET Webform的开发者,理解ASP.NET Webform的页面生命周期是非常重要的.主要是为了搞明白在哪里放置特定的方法和在何时设置各种页面属性.但是记忆和理解页面生命周期里提供 ...

  6. asp.net关于页面不回发,不生成__doPostBack方法问题的完美解决方案--ZT

    原文:http://www.sufeinet.com/thread-4564-1-1.html 这个问题我相信有不少人见过,就是使用系统的分页功能时,或者是使用系统控件,都会有一个回发的功能,这个功能 ...

  7. Asp.net2.0页面的生命周期

    当一个获取网页的请求(可能是通过用户提 交完成的,也可能是通过超链接完成的)被发送到Web服务器后,这个页面就会接着运行从创建到处理完成的一系列事件.在我们试图建立Asp.net页面的 时候,这个执行 ...

  8. 自学Web开发第十二天-基于VB和ASP.NET;页面嵌套、母版、网站导航

    自学Web开发第十二天-基于VB和ASP.NET:页面嵌套.母版.网站导航 页面嵌套 母版页 母版页的建立和使用 访问母版页上的元素 网站导航 站点地图 SiteMapDataSource控件 地图信 ...

  9. Asp.net前端页面开发总结

    经过半个月的奋斗,善良公社项目书画院前台的web界面竣工了.虽然界面并不是很完美,说明学习的地方还有很多.在界面部分需要的技术:div+css.JavaScript.Ajax.HTML和一般处理程序等 ...

  10. asp.net获取页面url参数值的实现代码实例

    asp.net获取页面url参数值的实现代码实例 file: default.aspx.cs using system; using system.data; using system.configu ...

最新文章

  1. 学Java的软件哪些比较好用
  2. 90. Subsets II
  3. leetcode1103. 分糖果 II 该模拟就模拟,别老想着优化
  4. php filespl,PHP SPL--遍历目录
  5. 迭代终止准则的三种形式_一种经验模态分解筛选迭代过程终止准则的方法与流程...
  6. spark 源码分析之八--Spark RPC剖析之TransportContext和TransportClientFactory剖析
  7. java Object类的公共方法
  8. 获取对话框当前cfont_flutter根据控件位置弹出对话框
  9. 统计学知识系列:一篇搞懂假设检验
  10. c语言英文信件怎么能,转 英文信件格式(附模板)
  11. NYOJ 33 蛇形填数——————思维
  12. 源码看JAVA【五】Byte
  13. linux的c文件报错for,linux c 编译错误 conflicting types for 的解决办法
  14. python 对比两张图片是否相同
  15. 作为一个项目经理,这七个项目管理经验你掌握了吗?
  16. 实现字典树(前缀树、Trie树)并详解其应用
  17. webconsole使用方法(fastapi框架)
  18. 仿有赞后台+vue+ts+vuecli3.0+elementUi 集合看这篇就够了
  19. 【网络】路由器和无线路由器就这么配置
  20. 简单谈谈编程语言(外篇)

热门文章

  1. python遵循什么协议_《Python网络爬虫》2.3 Robots协议的遵守方式
  2. 激光干涉仪使用方法_激光干涉仪选择几点建议「智能制造2025」
  3. java 循环笔记_Java笔记之嵌套循环1
  4. mysql查看innodb版本_mysql中查看innodb版本的方法
  5. gulp-cli命令安装出错_一个牛逼的数据库操作命令行工具:mycli
  6. sdk是什么_海外APP和游戏中最常用SDK排名(截止5月17, 2020)
  7. 教育启蒙赛道、亿级异构数据不停服平滑迁移方案和实践
  8. 类 java_java类的基本结构
  9. 计算机降序符号,rank函数降序排名
  10. java吃货联盟系统源码_小项目,吃货联盟,java初级小项目,源代码