1、浅析

ASP.NET中web应用程序中的aspx.cs文件中,存在一个<font style="color:rgb(77, 77, 77);">protected void Page_Load(object sender, EventArgs e)</font>这样的函数,这个函数顾名思义,便知道是页面加载函数。当每一次处理页面时,都要重新访问这一个函数。 那大家可能会问,为什么要有这样的一个页面加载函数,在实际编程中,有许多代码是每一次页面刷新时,都要重新加载。故此也就用到了这个函数。 经过测试Page_Load事件执行的情况分为两种: 第一种:页面第一次加载时执行。 第二种:前台页面事件触发后 ,后台的Page_Load会再一次执行。 那么具体的那些代码要写到这里呢?根据自己的理解,我有以下答案: ①:对控件的的数据绑定 ②:第一次加载时必须执行的代码

2、Demo

  1. <span style="font-family:'Comic Sans MS';">public partial class test1 : System.Web.UI.Page
  2. {
  3. protected void Page_Load(object sender, EventArgs e)
  4. {
  5. //利用color对象修改控件的颜色,定义按钮字体属性
  6. //TextBox1.BackColor = System.Drawing.Color.Red;
  7. //Button1.Font.Name = "Verdana";
  8. //Button1.Font.Size = FontUnit.Point(120);//设置实际大小
  9. //Button1.Font.Size = FontUnit.Large;//设置相对大小
  10. if (!Page.IsPostBack)
  11. {
  12. TextBox1.BackColor = System.Drawing.Color.Red;
  13. }
  14. if (Page.IsPostBack)
  15. {
  16. TextBox1.BackColor = System.Drawing.Color.Blue;
  17. }
  18. }</span>
可以看到,已经注释掉的代码,是对控件的基本数据绑定,那么这些代码必须在每一次的加载中执行。 if后面的代码解释: 这就用到了Page.IsPostBack。
  1. 当通过IE的地址栏等方式打开一个URL时是第一次打开, 当通过页面的提交按钮或能引起提交的按钮以POST的方式提交的服务器时,页面就不再是第一次打开了。(每点击一次按钮,都是一次加载)
  2. IsPostBack只有在第一次打开的时候是false,其它时候都是true

那么只需加载一次的代码便可以放入以下代码中。

if(!Page.IsPostBack){};

而多次打开时都需要加载的代码就可以放入以下代码中。

if(Page.IsPostBack){};

根据以上代码。便可以看出,第一次加载时,TextBox1的背景颜色被填充为红色。

而多次加载时,TextBox1的背景颜色改为蓝色。

3、遇见问题

今天在做Datalist 中遍历复选框选中状态时,后台的代码获取checkbox的选中状态始终是false,研究了好久才发现跟Page_Load()事件有关。 经过测试Page_Load事件执行的情况分为两种: 第一种:页面第一次加载时执行。 第二种:前台页面事件触发后 ,后台的Page_Load会在一次执行。
  1. protected void Page_Load(object sender, EventArgs e)
  2. {
  3. dataList_win(page);//数据绑定函数
  4. }
当页面第一次加载时Page_Load事件内部执行DataList数据绑定的函数,在页面点击按钮触发事件时在后台的代码会再一次执行Page_Load事件(数据绑定函数再一次执行),这样的话就算前台的复选框全都选中,进入后台时就会重新进行数据绑定,这样都就对前台的复选框选中状态重置,所以要在Page_Load()事件中对数据绑定的函数加上判断。
  1. protected void Page_Load(object sender, EventArgs e)
  2. {
  3. if (!Page.IsPostBack)//是否是页面第一次加载
  4. {
  5. wj_win(page);//第一次加载执行
  6. }
  7. }
PS:后台进行数据绑定的函数在被调用的时候页面才会显示数据,所以在Page_Load事件内添加该函数,这样就会在页面加载时显示数据。 无论何种情况都会执行Page_Load,这时就有必要判断一下服务器处理Page_Load事件时是在何种情况发生; 而Page.IsPostBack正好解决了这个问题; 当是第一种情况的时候(为了响应客户的请求)Page.IsPostBack返回false; 当是第二种情况的时候(把该页面回发到服务器给服务器处理时)Page.IsPostBack返回True; !Page.IsPostBack 就是为了 防止服务端的加载重复绑定数据!