Asp.Net页面生命周期之 IsPostBack
在写WebForm的时候在.cs文件里的Page_Load()方法里写的最多的就是if(!IsPostBack){...},当时只知道是第一次加载页面的时候执行,其实吧,当时就是只知其一不知其二啊,今天赶紧来补习一下。
IsPostBack=true说明是为了响应客户端进行的回发,也就是说根本不是第一次加载,而是在submit之后;IsPostBack=false才是第一次加载。
对于WebForm的 .cs文件里,代码的执行顺序其实这这样的:
1、公共变量
2、Page_Load()
3、button事件
其中页面的每次加载都会执行1、2两步,其中Page_Load()里又分为IsPostBack=true和false 2种情况。
来看实例:
public partial class Index : System.Web.UI.Page { protected string str = "ds"; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { str = "first"; Response.Write(str); } else { str = "not first"; Response.Write(str); } } protected void Button1_Click(object sender, EventArgs e) { Response.Write("12"); } }
页面一加载,显示first,刷新页面还是first,可是当点击按钮后,就变成 not first12,此时再刷新还是not first12,点击按钮后的执行顺序就是 str,IsPostBack=true,button_Click,但是,Response.Redirect()却是第一次加载要跳转的页面,所以IsPostBack=false,一定要注意啊,如果再click事件里再加上redirect则结果就是 first。
protected void Button1_Click(object sender, EventArgs e) { Response.Write("12"); Response.Redirect("index.aspx"); }
执行顺序是:加载 first,点击后IsPostBack=true,则not first,然后在Click事件里 not first12,然后redirect到当前页面,则相当于第一次加载,所以最终结果还是first。
我就问你6不6,其实用IsPostBack可以做很重要的事情,
补充一下哈:如果单机了button按钮,然后再刷新的话,相当于又点击了一次button按钮,另外呢,button有一个客户端事件:OnClientClick="return false;" 如果是这种形式的话,那就不会执行单机后的后端的一系列流程,用途也是很大的。
另外,再补充一点+=这个东西吧也有有坑的啊,下面这段代码只要不断点击按钮输出的结果居然是叠加,
public partial class Index : System.Web.UI.Page { protected string str = "ds"; protected void Page_Load(object sender, EventArgs e) { TextBox1.Text += str; } protected void Button1_Click(object sender, EventArgs e) { Response.Write(TextBox1.Text); } }
原因是什么知道吗,就是因为没有IsPostBack的限制,导致每次都执行Page_Load()的代码,而TextBox1.Text += str;就是当前文本框里的内容在前面再加上str
浙公网安备 33010602011771号