ASP.NET中IsPostBack的理解


這個屬性相信大家一定經常用吧 ,判斷是否為回發 (切記這是判斷是否回發 ,而聽到很多人說這是判斷是否第一次加載頁面 ,還有的說是否為刷新 )很多人說做項目時pageload事件里都要加上,例如下面的代碼:

protected void Page_Load(Object sender,EventArgs e)

{

     if(!IsPostBack)

      {

           //執行頁面首次請求時需要進行的操作;

        }

}

 

 

但是確不太理解根本原,說加上這個肯定沒錯 ,然而不知根本終會出錯。 所以 一定要理解原理~~

為了把這個說清楚 ,這里不用asp.net頁面 用html+handler 一般處理程序來講清這個屬性。如下:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>關於IsPostBack的理解</title>
</head>
<body>
<form action="Hello.ashx" method="post">
    <input type ="hiddle" name="isPostBack" class="haddile" name="isPostBack" value="true"/>
<label>姓名:</label>
<input type="text" id="txtUserName" name="txtUserName" value ="{userName}"/>
<label>年齡:</label>
<input type="text" id="txtUserAge" name="txtUserAge" value ="{userAge}" />
<input type="submint" value="提交" />
<label>{ErrorMsg}</label>
</form>
</body>
 
相關HttpHandler代碼如下:
publci void ProcessRequset(HttpContext context)
{
context.Response.ContextType = "text/html";
string userName = context.Request["txtUserName"];
string userAge = context.Request["txtUserAge"];
string msg = string.Empty;
string isPostBack = context.Request["isPostBack"];
if(isPostBack == "true")//如果提交了該參數則說明是回發提交表單進行請求頁面
{
context.Response.Write("表單提交回發請求頁面");
msg = userName +"你好!";
}
else
{
context.Response.Write("首次請求頁面");
userName = string.Empty;
mag = string.Empty;
userAge = string.Empty;
}
string fulPath = context.Server.MapPath("Hello.html");//得到文件全路徑
string content = System.IO.File.ReadAllText(fullPath);//讀取文件內容
content =content.Replace("{txtUserName}",userName);
content = content.Replace("{txtUserAge}",userAge);
content = content.Replace("{ErrorMsg}".msg,);
context.Response.Write(content);
}
public bool IsReusable
{
get{ return false;}
}

 閱讀代碼相信大家一看就知道怎么回事兒,這里簡要說下

運行HttpHandler因為第一次運行context.Request["isPostBack"]獲取傳進來的參數肯定是為null,所以會直接進入頁面讀取html,把首次請求處理的數據輸出到html頁面上。

(占位符{txtUserName})為了實現保存頁面狀態哦。

這時在html頁面輸入姓名和年齡點擊提交時(包括以后提交)

 <input type="hidden" name="ispostback" class="night" value="true" />

isPostBack的Value一直是True,所以context.Request["isPostBack"]獲取參數的值為“true”;這就造成了很多人說isPostBack是判斷是否為第一次請求頁面,其實當你進入頁面后進行刷新操作時,依然會發現isPostBack不為True,原因是你並沒有進行提交是想一次回發操作。

舉個生活的實例吧

假如你去餐館吃飯,那么餐館就是相當於服務器,你就是客戶端,那么餐館服務員提交給你的菜單(相當於是網頁首次打開,進行首次請求),然后你從菜單上點菜后將菜單返回給餐館服務員(這個過程相當於是進行isPsotBack回發請求)。餐館根據你的菜單做出你需要的才,上到你餐桌上(進行isPostBack后服務器返回給你的頁面)。

 其中的原理是就是這樣,如各位有更好的理解說明,不妨貼出來分享下!!!


免責聲明!

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



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