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

posted on 2017-02-22 23:00  奔游浪子  阅读(454)  评论(0)    收藏  举报

导航