IsPostBack原理詳解
這個屬性相信大家一定經常用吧 判斷是否為回發 (切記這是判斷是否回發 而聽到很多人說這是判斷是否第一次加載頁面 還有的說是否為刷新 )
很多人說做項目時 pageload事件里 都要加上
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
}
}
但是確不太理解原因 說加上這個肯定沒錯 可是 上篇的例子里 不就錯了么? 所以 一定要理解原理~~
為了把這個說清楚 這里不用asp.net頁面 用html+handler 一般處理程序來講清這個
我先把代碼貼出來
html的
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<form action="Hello2.ashx" method="post">
<input type="hidden" name="ispostback" class="night" value="true" />
姓名:<input type="text" id="fasdfasd" name="UserName" value="@value" /><input type="submit" value="提交" />
@msg
</form>
</body>
</html>
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/html";
string username = context.Request["UserName"];
string msg = "";
string ispostback = context.Request["ispostback"];//
if (ispostback=="true")//如果提交了這個參數則說明是提交表單進來的
{
context.Response.Write("提交進入");
msg = username + "你好";
}
else
{
context.Response.Write("直接進入");
username = "";
msg = "";
}
string fullpath = context.Server.MapPath("Hello2.htm");//得到文件的全路徑
string content = System.IO.File.ReadAllText(fullpath);//讀取文件
content = content.Replace("@value",username);
content = content.Replace("@msg", msg);
context.Response.Write(content);
}
public bool IsReusable {
get {
return false;
}
}
這個貼出來 相信大家一看就明白怎么回事了 我大概說下
上來先運行 handler 因為第一次運行
context.Request["ispostback"]; 肯定是空的 所以直接進入 然后讀取html 把里面的內容輸出到頁面上 (占位符@value等 為了實現保存頁面狀態 模擬asp.net)
這時點提交時 包括以后點提交時 因為有下面這句 所以 ispostback一直就是true了<input type="hidden" name="ispostback" class="night" value="true" />這也就造成很多人說 ispostback是 判斷是否是第一次進入 其實 你進入以后 點刷新 依然會發現 ispostback 不為true 因為并沒有提交實現一次回發
這個說的有點亂了~~ 但是基本原理就這樣 希望對新手有幫助
多看下上面的代碼 復制下來運行試試 就明白啦~ 不懂下面留言 歡迎討論
這里補充下用途
在里面執行數據綁定 減少不必要的與數據庫交互protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// 執行數據綁定 等
}
}
如果不加這個判斷 當你點擊按鈕時 每次都是先執行Page_Load 再執行 事件的
這就造成點一次 按鈕 執行下數據綁定 與數據庫交互很費資源
但加上 這個判斷 則沒有這個問題了~~
浙公網安備 33010602011771號