P.NET页用于编译的属性, 每个ASP.NET只能有一个@Page指令,且必须书写在页面中所有的其他代码之前
?
Page指令后的参数意义见下表
参数
Language AutoEventWireup CodeFile Inherits
说明
页面中代码的语言,必须是.NET CLR支持的语言 是否自动绑定页的事件 后置代码文件名 页面类
页面级别对象
?
@页面的生命周期
?
PreInit Init
?
在Page对象的生命周期中,引发的事件与过程见表 一个ASP.NET页面运行时(即一个Page对象)都会经历一个生命 周期,在生命周期中将执行一系列处理步骤,包括初始化、实例化 页事件 典型使用 控件、还原和维护状态、运行事件处理程序代码以及进行呈现
在控件初始化之前引发
当页面第一次加载完成后,程序已经被卸载,用户操作后引发回发 在所有控件都已初始化且已应用所有外观设置后引发 (PostBack),形成一个新请求,此时会重新开始一个新Page对象的 最常用的事件是Load事 InitComplete 完成所有初始化工作后由Page对象引发 生命周期,Page_Load事件会被再次触发 件,它一般用于编写代
码设置页面中控件的值 PreLoad 加载页面前引发 ? 为了模拟WinForm的事件驱动模型,页面回发时ASP.NET会采取一些
特殊的机制将控件的状态提供给Page对象,并设置其IsPostBack的属 加载页面时引发 性为True,来与第一次加载相区别 LoadComplete 加载页面完成时引发
Load PreRender SaveStateComplete Render Unload 在页面呈现前引发 页面内所有视图状态都保存后引发 不属于事件,调用呈现方法的过程 页面卸载时引发
页面级别对象
Page_Load事件是当页面第一次访问触发
的事件吗? 答 案 是
1.3 页面的回发与处理
程序要求输入一个数字,然后使用按钮对其进行增加和减少, 运行界面如图所示。对程序增加一个功能,要求其页面初次加 载时的文本框中数据不为0,而是1~14之间的随机数 protected void Page_Load(object sender, EventArgs e)
? {
初次加载页面时,文本 框中会显示一个1~14 Random r = new Random(DateTime.Now.Millisecond); 之间的随机整数。点击 txtNumber.Text = Convert.ToString(r.Next(1, 15)); 按钮“+”两次
}
页面的回发与处理
为什么和预期的结果不一样?
程序不能正确
工作是由Page对象的Load事件引发的。与WinForm中的 事件处理不同,Page对象的Load事件总是会被触发,这是由ASP.NET 的事件处理模式决定的 ? 为了避免回发时Page_Load方法再次改变文本框中的值,需要使用Page 对象的IsPostBack属性,该属性是在Page对象的PreInit事件引发前,由 系统自动设置,当系统检测到页面是回发状态时,会自动将IsPostBack属 性设为true ? IsPostBack属性在Page类中是非常重要的一个属性,用于将页面的第一 次加载和因客户端回发而加载的情况进行区分。使用IsPostBack属性可以在 第一次加载页面时对页面的控件属性进行初始化。而客户端回发而加载的情 况则不进行初始化,既可以减少重复初始化带来的系统消耗,又可以避免在 回发时初始化而引起的客户端传入的值丢失
?
页面的回发与处理
protected void Page_Load(object sender, EventArgs e) { 点击两次 if (!IsPostBack) “+” { //仅在页面第一次加载时运行 Random r = new Random(DateTime.Now.Millisecond); txtNumber.Text = Convert.ToString(r.Next(1, 15)); } }
1.4 跨页发送
? ?
?
ASP.NET中,除了页面自身的回发外,程序也可能由其他页面将数 据提交到本页面,这种发送称为跨页发送 跨页发送可以来源于同一个或者不同的Web应用程序。如果跨页发 送的来源与页面位于同一个Web应用程序,可以通过Page类的 PreviousPage属性来获取来源页对象,来源页对象默认为Page对象。 通过使用Page对象的FindControl方法可以找到对应的控件并获取其 值。如果跨页发送的来源与页