快速业务通道

Asp.net ViewState—又见ViewState

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-19

HTML

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
  <title>Untitled Page</title>
</head>
<body>
  <form id="form1" runat="server">
  <div>
  <asp:DropDownList ID="ddlTest" runat="server" /><asp:Button ID="btnTest" runat="server" Text="Test"/>
  </div>
  </form>
</body>
</html>

CS

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
  
public partial class _Default : System.Web.UI.Page
{
  protected void Page_Init(object sender, EventArgs e)
  {
    ddlTest.Items.Add(new ListItem("Init", "Init"));
  }
  protected void Page_Load(object sender, EventArgs e)
  {
    ddlTest.Items.Add(new ListItem("Load", "Load"));
  }
}

最近看见有朋友说Page_Init只执行一次,我始终将信将疑,于是自己测试一下,结果发现在每次单击按钮的时候还真的不会再增加Init这样的列表项了。难道Page_Init还真的是只执行一次么?空想也不是解决办法,打个断点跟踪下吧,发现每次回发时Init是会执行的,由此可见出现这种情况是和Init无关的(她是无辜的)。真正的幕后''黑手''又会是谁呢?

一、页面生命周期

一个ASP.NET页面大致可以分为一下几个阶段:

1,因为它也是一个类,所以构造函数是必定首当其冲的,不过我们一般很少会用到它。

2,初始化阶段。在这个阶段,asp.net为我们细化了三个方法:Page_PreInit,Page_Init,Page_InitComplete,他们的方法签名和Page_Load完全一样,全是 void Page_XXX( object sender, EventArgs e )..的形式。而方法名称也都是固定的(这些可以通过查看TemplateControl源码看到)。

3,Load阶段。这个阶段我们可以通过这几个方法来对页面进行控制:Page_PreLoad,Page_LoadComplete,Page_Load。

4,如果有定义了引起回发的控件的相应事件处理程序(比如按钮,点击后引起回发,这时如果你在后台定义了该按钮的Click事件处理程序),则执行该事件处理程序(会在Page_LoadComplete执行前执行)。

5,呈现。同样,有这样几个方法:Page_PreRender,Page_PreRenderComplete,Render。

6,卸载页面,释放资源:Page_Unload

注:这些方法和相应的事件绑定是通过在aspx页面的@Page指令里设置AutoEventWireup="true"来完成的。如果去掉这个属性,则这些方法将不再发挥作用。

下面看个小例子:

执行顺序

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
  
public partial class Default2 : System.Web.UI.Page
{
 

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号