一、IsPostBack 是Page類有一個bool類型的屬性,用來判斷針對當前Form的請求是第一次還是非第一次,IsPostBack=false時表示是第一次請求,當IsPostBack=true時,表示是非第一次請求。因
為第一次請求的時候會執行Page_Load,在非第一次請求的時候也會執行Page_Load。為什么對同一個Form有多次請求呢?asp.net中引入了服務器端事件,支持服務器端事件的控件,會發出對當前Form的請求,這樣在很多情形下我們就需要區別是否是對這個Form的第一次請求。
二、IsPostBack結論
1、對於使用Server.Transfer進行進行遷移時遷移到的頁面其IsPostBack=false 每次刷新頁面都是第一次加載頁面;
2. Post方式如果Request中沒有請求值,即Request.Form =null則IsPostBack=false;Get方式如果Request中沒有請求值,即Request.QueryString =null則IsPostBack=false。
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是將執行完全轉移到指定頁面
二、解決編輯數據時數據更新的數據原來的,無法修改的問題
解析:因為當后台編輯數據時,先從后台查詢出需要編輯的數據,此時是在不是回傳的情況下從數據庫查詢出數據,當編輯完數據之后,點擊提交按鈕,提交數據,此時如果沒有判斷是否回傳,會再次查詢原來的數據,造成編輯數據沒有改變。
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)
{
Bind();
}
else
{
Response.Write("<script>alert('數據發生改變')</script>");
}
}
public void Bind()
{
Response.Write("數據");
}
protected void button1_Click(object sender, EventArgs e)
{
Response.Redirect("WebForm1.aspx?id=3 ");
//Server.Execute("WebForm2.aspx?id=3");
}
protected void CesH_Click(object sender, EventArgs e)
{
Label1.Text = "測試";
}
}
}