ASP.NET中web应用程序中的aspx.cs文件中,存在一个
protected void Page_Load(object sender, EventArgs e)
这样的函数,这个函数顾名思义,便知道是页面加载函数。当每一次处理页面时,都要重新访问这一个函数。
那大家可能会问,为什么要有这样的一个页面加载函数,在实际编程中,有许多代码是每一次页面刷新时,都要重新加载。故此也就用到了这个函数。
经过测试Page_Load事件执行的情况分为两种:
第一种:页面第一次加载时执行。
第二种:前台页面事件触发后 ,后台的Page_Load会再一次执行。
那么具体的那些代码要写到这里呢?根据自己的理解,我有以下答案:
①:对控件的的数据绑定
②:第一次加载时必须执行的代码
2、Demo
<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>
可以看到,已经注释掉的代码,是对控件的基本数据绑定,那么这些代码必须在每一次的加载中执行。
if后面的代码解释:
这就用到了Page.IsPostBack。
当通过IE的地址栏等方式打开一个URL时是第一次打开, 当通过页面的提交按钮或能引起提交的按钮以POST的方式提交的服务器时,页面就不再是第一次打开了。(每点击一次按钮,都是一次加载)
IsPostBack只有在第一次打开的时候是false,其它时候都是true
那么只需加载一次的代码便可以放入以下代码中。
if(!Page.IsPostBack){};
而多次打开时都需要加载的代码就可以放入以下代码中。
if(Page.IsPostBack){};
根据以上代码。便可以看出,第一次加载时,TextBox1的背景颜色被填充为红色。
而多次加载时,TextBox1的背景颜色改为蓝色。
3、遇见问题
今天在做Datalist 中遍历复选框选中状态时,后台的代码获取checkbox的选中状态始终是false,研究了好久才发现跟Page_Load()事件有关。
经过测试Page_Load事件执行的情况分为两种:
第一种:页面第一次加载时执行。
第二种:前台页面事件触发后 ,后台的Page_Load会在一次执行。
protected void Page_Load(object sender, EventArgs e)
dataList_win(page);
当页面第一次加载时Page_Load事件内部执行DataList数据绑定的函数,在页面点击按钮触发事件时在后台的代码会再一次执行Page_Load事件(数据绑定函数再一次执行),这样的话就算前台的复选框全都选中,进入后台时就会重新进行数据绑定,这样都就对前台的复选框选中状态重置,所以要在Page_Load()事件中对数据绑定的函数加上判断。
protected void Page_Load(object sender, EventArgs e)
if (!Page.IsPostBack)
wj_win(page);
PS:后台进行数据绑定的函数在被调用的时候页面才会显示数据,所以在Page_Load事件内添加该函数,这样就会在页面加载时显示数据。
无论何种情况都会执行Page_Load,这时就有必要判断一下服务器处理Page_Load事件时是在何种情况发生;
而Page.IsPostBack正好解决了这个问题;
当是第一种情况的时候(为了响应客户的请求)Page.IsPostBack返回false;
当是第二种情况的时候(把该页面回发到服务器给服务器处理时)Page.IsPostBack返回True;
!Page.IsPostBack 就是为了 防止服务端的加载重复绑定数据!
- 36.6w
-
风雨_83
掘金·日新计划
Flutter
- 1.8w
-
摸鱼的春哥
Vue.js
React.js