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
可以看到,已经注释掉的代码,是对控件的基本数据绑定,那么这些代码必须在每一次的加载中执行。 if后面的代码解释: 这就用到了Page.IsPostBack。
<span style="font-family:'Comic Sans MS';">public partial class test1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//利用color对象修改控件的颜色,定义按钮字体属性
//TextBox1.BackColor = System.Drawing.Color.Red;
//Button1.Font.Name = "Verdana";
//Button1.Font.Size = FontUnit.Point(120);//设置实际大小
//Button1.Font.Size = FontUnit.Large;//设置相对大小
if (!Page.IsPostBack)
{
TextBox1.BackColor = System.Drawing.Color.Red;
}
if (Page.IsPostBack)
{
TextBox1.BackColor = System.Drawing.Color.Blue;
}
}</span>
- 当通过IE的地址栏等方式打开一个URL时是第一次打开, 当通过页面的提交按钮或能引起提交的按钮以POST的方式提交的服务器时,页面就不再是第一次打开了。(每点击一次按钮,都是一次加载)
- IsPostBack只有在第一次打开的时候是false,其它时候都是true
那么只需加载一次的代码便可以放入以下代码中。
if(!Page.IsPostBack){};
而多次打开时都需要加载的代码就可以放入以下代码中。
if(Page.IsPostBack){};
根据以上代码。便可以看出,第一次加载时,TextBox1的背景颜色被填充为红色。
而多次加载时,TextBox1的背景颜色改为蓝色。
3、遇见问题
今天在做Datalist 中遍历复选框选中状态时,后台的代码获取checkbox的选中状态始终是false,研究了好久才发现跟Page_Load()事件有关。 经过测试Page_Load事件执行的情况分为两种: 第一种:页面第一次加载时执行。 第二种:前台页面事件触发后 ,后台的Page_Load会在一次执行。当页面第一次加载时Page_Load事件内部执行DataList数据绑定的函数,在页面点击按钮触发事件时在后台的代码会再一次执行Page_Load事件(数据绑定函数再一次执行),这样的话就算前台的复选框全都选中,进入后台时就会重新进行数据绑定,这样都就对前台的复选框选中状态重置,所以要在Page_Load()事件中对数据绑定的函数加上判断。
protected void Page_Load(object sender, EventArgs e)
{
dataList_win(page);//数据绑定函数
}
PS:后台进行数据绑定的函数在被调用的时候页面才会显示数据,所以在Page_Load事件内添加该函数,这样就会在页面加载时显示数据。 无论何种情况都会执行Page_Load,这时就有必要判断一下服务器处理Page_Load事件时是在何种情况发生; 而Page.IsPostBack正好解决了这个问题; 当是第一种情况的时候(为了响应客户的请求)Page.IsPostBack返回false; 当是第二种情况的时候(把该页面回发到服务器给服务器处理时)Page.IsPostBack返回True; !Page.IsPostBack 就是为了 防止服务端的加载重复绑定数据!
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)//是否是页面第一次加载
{
wj_win(page);//第一次加载执行
}
}