新手入門,多多關照。
http協議是無狀態的,當我們點擊提交按鈕後,提交到處理頁面,如果處理頁面時當前頁面的話,在aspx頁面中,我們看到的結果是提交前的頁面和處理後的返回結果組合而成的頁面。他的內部實現原理實際上是這樣的:
使用者點擊提交後,讀取原頁面的內容,並重新寫回到頁面中,舉例:文字框數字自增功能:
1.模板機制,建立一個html頁IncNum.htm,作為模板
<html>
<body>
<form action="IncNum.ashx">
<input type="text" name = "txtnum" value="@balue"/>
<input type="hidden" name="IsPostBack" value="true"/>
<input type="submit" value = "自加"/>
</form>
</body>
</html>
2.建立一個ashx頁面作為處理頁面IncNum.ashx,處理代碼如下
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/html";
string ispostback = context.Request["IsPostBack"];
string value ="0";
if(ispostback=="true")//是提交
{
int num = Convert.ToInt32(context.Request["txtnum"]);
num++;
value = num.TOString();
}
string fullpath = context.Server.MapPath("IncNum.htm");//擷取模板檔案的路徑
string content=File.ReadAllText(fullpath);//讀模數板檔案
content = content.Replace("@value",num);將自加後的內容替換
context.Response.write(content);
}
public bool IsReusable {
get {
return false;
}
}
}
解釋一:IsPostBack實際上就是表單中的隱藏欄位,它的value固定式true,當使用者點擊“自加”按鈕後,IspostBack同樣也被提交到伺服器端,處理常式讀出了這個值便可以判定頁面是被提交的,然後讀取提交值作相應處理,如果讀不到,則頁面時首次進入,我們可以欺騙伺服器:直接在瀏覽器中輸入地址http://localhost:1128/IncNum.ashx?IsPostBack=true,則處理常式會把頁面當成提交的頁面處理。
在aspx頁面中的IsPostBack就是使用這個原理實現的。
解釋二:ashx頁面是給使用者看的,html頁面是模板頁面,使用者看不到,html頁面中@value相當於是一個預留位置,ashx頁面讀取html頁面,並用字串替換方法把預留位置替換成處理後的值。然後重新寫回到頁面中,這就是為什麼提交後的頁面還會保持原來的樣子。