1.IsPostBack用來推斷表單是否是回發。
(不是第一次請求),是點擊表單的提交button回發過來的。是否是回發與get請求還是Post請求無關。可是普通情況下回發都是Post請求。
一般Get請求都是第一次載入。
2.僅僅有當使用server端表單<form runat="server">IsPostBack才干夠使用。
假設使用client表單,則IsPostBack永遠都是False.由於當使用server端表單的時候會自己主動生成一個隱藏域,才該隱藏域中,server寫入了一些內容。通過這些內容就能夠推斷是否是回發。
假設使用的是普通html表單。則須要自己寫代碼來推斷是否是回發。
3.IsPostBack的使用方式。為什么要使用IsPostBack
降低數據載入的次數。避免了每次點擊button回發都又一次載入一次數據。
HTML頁面
<html> <form action="Page1.aspx"> <input type="text" name="UserName" value="Jim"> <input type="submit" value="提交"> </form> </html>
-------------------------------------------------------------Page1.aspx處理頁面(一般處理程序) public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/html"; string mappath = context.Server.MapPath("Page1.aspx");//獲取Page1.aspx的路徑 string con = System.IO.File.ReadAllText(mappath); //讀取mappath的內容 context.Response.Write(con); 將內容寫入(畫出)到瀏覽器端 //在這里推斷用戶是否是第一次進入頁面(即:用戶不是在向server在提交表單) string name=context.Request["UserName"];//獲取一下name屬性為UserName表單的值。假設能獲取到值那么用戶就是提交了表單而進入頁面。否則用戶就是第一次進入頁面 if (string.IsNullOrEmpty(name)) //假設沒有獲取到name屬性為UserName表單的值。
{ context.Response.Write("直接就進入網頁了,即用戶第一次進入頁面。
並沒有提交表單"); } else { context.Response.Write("提交表單后。經過處理后進入的網頁(也就是說網頁是經過提交表單后又一次畫出來的)"); } }
那么如今問題就來了, 每次去取有name 屬性的表單的值,以能不能獲取到這個值(推斷是否為空)來推斷用戶是否為提交進入頁面。
這樣是有問題的,假如這個有name屬性表單的值本身就是同意為空呢? 所以我們這里就加入一個隱藏字段hidden 將他的name 屬性設為isPostback ,value值永遠設為true(當然你也能夠設置其它的值,僅僅要不為空)
這樣用戶每次提交表單的時候,無論其它有name屬性的表單值是否為空,hidden這個表單的值是一定能提交出去,而且能獲取到這個值的(由於我已經將hidden表單的值設為一定不能為空) 那么我們就用這個hidden表單的的值是否為空來推斷用戶是否為提交表單而進入頁面(即:用戶不是第一次進入頁面)
<html> <form action="Page1.aspx"> <input type="hidden" name="ispostback" value="true"> <input type="text" name="UserName" value=""> <input type="submit" value="提交"> </form> </html>
//if(!ispostback)就表示用戶是第一次進入頁面。if(ispostback)就表示用戶是提交表單進入,非第一次進入頁面 // 假設isPostback==true 那么是提交進入 ; 即:if(ispostback) 提交進入 否則第一次進入 //-------------------------------------------------------------Page1.aspx處理頁面(一般處理程序) public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/html"; string mappath = context.Server.MapPath("Page1.aspx");//獲取Page1.aspx的路徑 string con = System.IO.File.ReadAllText(mappath); //讀取mappath的內容 context.Response.Write(con); //將內容寫入(畫出)到瀏覽器端 //在這里推斷用戶是否是第一次進入頁面(即:用戶不是在向server在提交表單) string ispostback=context.Request["ispostback"];//獲取一下name屬性為ispostback表單的值。假設能獲取到值那么用戶就是提交了表單而進入頁面。否則用戶就是第一次進入頁面 //string.IsNullOrEmpty()是推斷一個值是否為空。假設為空則返回true 否則返回false if (string.IsNullOrEmpty(ispostback)) //假設沒有獲取到name屬性為ispostback表單的值。{ context.Response.Write("直接就進入網頁了。並沒有提交表單"); } else { context.Response.Write("提交表單后,經過處理后進入的網頁(也就是說網頁是經過提交表單后又一次畫出來的)"); } //if(ispostback==null) //{ // context.Response.Write("直接就進入網頁了,並沒有提交表單"); //} //else //{ // context.Response.Write("提交表單后。經過處理后進入的網頁(也就是說網頁是經過提交表單后又一次畫出來的)"); //} }