当前位置:编程学习 > asp >>

ASP.NET IsPostBack属性剖析

 ASP 是一项微软公司的技术,是一种使嵌入网页中的脚本可由因特网服务器执行的服务器端脚本技术指 Active Server Pages(动态服务器页面),运行于 IIS 之中的程序 。


   在学习ASP.NET视频中,先了解刚开始最先接触的就是窗体加载事件,当我们第一次浏览器请求服务器时会会执行Page_Load,在非第一次请求的时候也会执行Page_Load。为什么对同一个Form有多次请求呢?asp.net中引入了服务器端事件,支持服务器端事件的控件,会发出对当前Form的请求,这样在很多情形下我们就需要区别是否是对这个Form的第一次请求。解决这个问题我们引入了PostBack的IsPostBack属性:

 


    在深究该属性之前我们先区分PostBack的IsPostBack的区别:由aspx的页面回传机制的基础知识得知 postback是回传即页面在首次加载后向服务器提交数据,然后服务器把处理好的数据传递到客户端并显示出来,就叫postback, ispostback只是一个属性,即判断页面是否是回传,if(!Ispostback)就表示页面是首次加载,这是很常用的一个判断方式.一个页面只能加载一次,但可以在加载后反复postback

 

     IsPostBack是Page类有一个bool类型的属性,用来判断针对当前Form的请求是第一次还是非第一次请求。当IsPostBack=true时表示非第一次请求,我们称为PostBack,当IsPostBack=false时表示第一次请求。在asp.net框架内部有很多的场景需要判断IsPostBack,比如LoadAllState等操作就需要在PostBack的时候进行。对于我们自己使用WebForm进行开发时,经常会在Page_Load中对IsPostBack进行判断,因为第一次请求的时候会执行Page_Load,在非第一次请求的时候也会执行Page_Load。为什么对同一个Form有多次请求呢?asp.net中引入了服务器端事件,支持服务器端事件的控件,会发出对当前Form的请求,这样在很多情形下我们就需要区别是否是对这个Form的第一次请求

 

 

 

代码解析:
1、对于使用Server.Transfer进行进行迁移时迁移到的页面其IsPostBack=false 每次刷新页面都是第一次加载页面;

2.  Post方式如果Request中没有请求值,即Request.Form =null则IsPostBack=false;Get方式如果Request中没有请求值,即Request.QueryString =null则IsPostBack=false。

 

[csharp] 
<SPAN style="FONT-FAMILY: SimSun; FONT-SIZE: 18px">namespace Example 

    public partial class WebForm1 : System.Web.UI.Page 
    { 
        protected void Page_Load(object sender, EventArgs e) 
        { 
            if (!IsPostBack)   //不是回传即第一次加载页面传过来的值为空  
            { 
                if (Request.QueryString["id"] != null) 
                { 
                    Response.Write("回传"); 
                } 
 
                else 
 
                { 
 
                        Response.Write("不是回传"); 
 
                 } 
            } 
          
        } 
 
  
 
        protected void button1_Click(object sender, EventArgs e) 
        { 
            Response.Redirect("WebForm1.aspx?id=3 "); 
        } 
    } 
}</SPAN> 

namespace Example
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)   //不是回传即第一次加载页面传过来的值为空
            {
                if (Request.QueryString["id"] != null)
                {
                    Response.Write("回传");
                }

                else

                {

                        Response.Write("不是回传");

                 }
            }
        
        }

 

        protected void button1_Click(object sender, EventArgs e)
        {
            Response.Redirect("WebForm1.aspx?id=3 ");
        }
    }
}

 

 

3.使用Response.Redirect方式向自画面迁移时,此时IsPostBack=false

 


4.发生跨页提交(CrossPagePostBack),当访问PreviousPage属性的时候,对于源Page,IsPostBack=true。发生跨页提交(CrossPagePostBack)时目标页面是IsPostBack=false。

 


5.使用Server.Execute迁移到的页面其IsPostBack=false。

 

 

 

Server.Execute和Server.Transfer的区别

Server.Execute("another.aspx")和Server.Transfer("another.aspx")区别: 
Execute是从当前页面转移到指定页面,并将执行返回到当前页面 
Transfer是将执行完全转移到指定页面

 

 

 

实例1:
[csharp
<SPAN style="FONT-FAMILY: SimSun; FONT-SIZE: 18px"> protected void Page_Load(object sender, EventArgs e) 
        { 
            if (!this.IsPostBack) 
            { 
                SqlConnection con = DB.createConnection(); 
                con.Open(); 
                SqlCommand cmd = new SqlCommand("select * from personLike", con); 
 &nbs

补充:Web开发 , ASP.Net ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,