[ASP.NET 教程] 二. Web Forms
2024-07-10 12:56:34
供稿:網友
 
1. 服務器端處理
雖然form.html能夠通過post或者get方法產生回發(fā),但是它仍然不能夠處理用戶輸入,仍然是一個靜態(tài)頁面,現在我們需要在服務器端處理用戶輸入及回發(fā)。
在服務器端處理用戶輸入有很多方式,因為本文是asp.net教程,故只談asp.net。
asp.net使用web form來描述web頁面,通過面向對象的編程方式,配合.net framework,使web應用程序設計變得更簡單,更高效,功能更為強大。
2. web forms
先從一個簡單的示例程序開始:
doadd.aspx
html 代碼:
<html>
<head>
<title>web form</title>
</head>
<body>
<form runat="server">
<asp:textbox runat="server" id="value1" />
+ <asp:textbox runat="server" id="value2" />
<asp:button runat="server" text=" = " onclick="add" />
<asp:label runat="server" id="result" />
</form>
</body>
</html>
<script language="c#" runat="server">
void add(object sender, eventargs e)
{
if(value1.text == "")
value1.text = "0";
if(value2.text == "")
value2.text = "0";
try
{
result.text = (int.parse(value1.text) + int.parse(value2.text)).tostring();
}
catch
{
result.text = "error";
}
}
</script>
這里假設讀者已經正確安裝iis和asp.net,且web服務器的主目錄為c:/inetpub/wwwroot/,以后如無特殊說明,均如此。
將該文件放在c:/inetpub/wwwroot/,保存為doadd.aspx,然后在瀏覽器的地址欄輸入http://localhost/doadd.aspx ,web form即呈現在瀏覽器中。
頁面上有2個輸入框,一個按鈕,當用戶單擊“=”按鈕時,程序會將2個輸入框中的值相加,然后將結果顯示在等號按鈕之后,如果輸入了錯誤的值,結果顯示“error”。
這個程序十分簡單,但是它卻是一個完整的動態(tài)web程序。它在服務器端處理用戶輸入,然后動態(tài)生成html頁面。
使用ie打開頁面后,選擇菜單【查看】|【源文件】,會看到下面的html源代碼:
html 代碼:
<html>
<head>
<title>web form</title>
</head>
<body>
<form name="_ctl0" method="post" action="1.aspx" id="_ctl0">
<input type="hidden" name="__viewstate" value="ddwxote0ndy4ode2ozs+yeczcnblhd6d7s7+uue+wrxr/6i=" />
<input name="value1" type="text" id="value1" />
+ <input name="value2" type="text" id="value2" />
<input type="submit" name="_ctl1" value=" = " />
<span id="result"></span>
</form>
</body>
<html>
可以看出來textbox控件變成了<input type=”text” />標記,button控件變成了<input type=”submit” />標記,label控件變了<span></span>標記,其中還有一個奇怪的<input type=”hidden”>標簽,名為__viewstate,現在只需要知道它是asp.net用來處理服務器和瀏覽器間往返數據的一種機制,以后會詳細介紹。
觀察aspx文件,可以看到form標簽和其中的所有控件都有一個屬性:runat=”server”,這表示這個標簽在服務器端運行,而不是直接發(fā)送到客戶端瀏覽器。
一個<asp:...>控件實際上是對應于一個system.web.ui.webcontrols中的類,比如<asp:textbox />對應于system.web.ui.webcontrols.textbox,<asp:button />對應于system.web.ui.webcontrols.button,這些標簽中還可以包含一些其他屬性,例如<asp:button/>的text屬性對應了system.web.ui.webcontrols.button類中的text屬性,比較特殊是id屬性,它表示該控件的可編程名稱,用于在代碼中訪問該控件。
<script></script>腳本塊也標記為了runat=”server”,因為這是在服務器端運行的代碼,而不是客戶端腳本。
觀察<asp:button />標簽,其中有一個屬性:onclick=”add”,它指定了一個事件處理程序,當用戶點擊按鈕時,會觸發(fā)該click事件,于是程序調用<script></script>塊中的add方法。添加事件處理的規(guī)則是:將事件名稱加上前綴“on”,作為控件標記的一個屬性。例如:<asp:button onload=”button_load” runat=”server” />,其中的事件名稱,可以查閱.net framework sdk文檔中對應類的公共事件。
下面簡單描述一下事件模型的底層原理,在服務器返回給客戶端的html中,有一個html form,其中有一個提交按鈕,單擊這個按鈕時,瀏覽器利用post方法將<input>控件中的輸入傳回服務器,asp.net知道用戶單擊了“=”按鈕而產生了回發(fā) ,在服務器端響應click事件,于是asp.net調用add方法,然后再一次生成html頁面,因為調用add方法時對label控件的text屬性賦了值,所以生成的html中<span></span>標記包含了一個字符串,對應label控件的text屬性值。