isPostback 的原理及作用(很easy)


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("提交表單后。經過處理后進入的網頁(也就是說網頁是經過提交表單后又一次畫出來的)"); //} }








免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM