
3.5 Web窗体的程序实例
3.4节介绍了Web窗体的事件驱动编程的基本知识,了解了Web窗体的处理过程和引发的页面事件。在窗体的处理过程中主要的页面事件有Page_Init、Page_Load、Page_PreRender、Page_UnLoad。用户可以在Web窗体中编写这些事件过程的代码,当这些页面事件发生时就会调用这些事件过程,完成用户想要的操作。下面对这些事件进行简单介绍。
Page_Init事件:当初始化页面时触发该事件。
Page_Load事件:当在内存中加载页面时引发该事件。不管是首次加载,还是提交后重新加载页面,Page_Load事件都会被执行。用户可以通过IsPostBack属性来判断页面是否是第一次加载,如果是第一次加载,则IsPostBack的值为true,这样就可以决定一段代码是在首次加载时执行,还是在回传刷新之后执行。另外,在这个事件里可以执行数据绑定、读取或更新控件属性等操作。
Page_PreRender事件:在页面预呈现之前触发该事件,这里涉及一些高级论题,如事务处理,本教材对此不做讨论。
Page_Unload事件:Page对象从内存中卸载并将输出结果发送给浏览器时触发该事件,这个事件主要用来执行清理工作,如关闭文件、关闭数据库等操作。由于这个事件是最后一个事件,页面中所有的内容已经传到客户端浏览器,所以不能使用它来改变控件。这个事件并不是指用户在浏览器端关闭页面,而是从IIS角度来讲,页面从内存中卸载时触发这个事件。
下面通过一个例子介绍Web窗体的事件驱动编程。
【例3.3】改写例3.1的Web窗体程序。在设计阶段不改变任何控件的默认属性值,而在Web窗体处理过程中的Page_Load事件中完成标签、文本框属性的初始化,在Page_PreRender事件中添加代码,完成文本框的清空操作,程序实现的功能同例3.1。
设计步骤如下:
(1)创建文件系统网站ch3_2,在站点ch3_2中新建一个页面,选用代码内联模式,名称为L3_2.aspx。在Web窗体的设计界面中添加两个标签、一个文本框和一个按钮控件,所有控件采用默认设置,如图3.13所示。

图3.13 Web窗体设计界面
在图3.13的状态下,按【F7】键,进入HTML代码编辑窗口,选择Page对象,如图3.14所示;在右侧的事件选择下拉框中选择Load事件,如图3.15所示,然后光标就会定位在Page_Load事件过程中。为Button1按钮添加单击事件代码。

图3.14 选择Page对象

图3.15 选择Load事件
在“源”视图中编写如下代码,实现应用程序的功能。
<script runat="server"> protected void Page_Load(object sender, EventArgs e) { Label1.Text = "这里将显示某某同学您好!"; Label2.Text = "请输入您的姓名:"; Button1.Text = "请按我一下"; } protected void Page_PreRender(object sender, EventArgs e) { TextBox1.Text = ""; } protected void Button1_Click(object sender, EventArgs e) { Label1.Text = TextBox1.Text + "同学您好!"; } </script>
调试运行程序,程序运行结果如图3.16和图3.17所示。

图3.16 程序运行结果—提交前