服務器端的控制如何工作? 作 者 : 青蘋果電腦工作室
這是如何實現的?關鍵是runat="server" 屬性。要了解這是如何進行的,看看瀏覽器內頁面 的源代碼。是這樣的:
〈 HTML 〉 〈 BODY 〉 You selected 'Windows 98' for machine 'tizzy'. 〈 FORM name="ctrl0" method="post" action="pageone.aspx" id="ctrl0" 〉 〈 INPUT type="hidden" name="__VIEWSTATE" value="a0z1741688109__x" 〉 Machine Name: 〈 INPUT type="text" id="txtName" name="txtName" value="tizzy" 〉 〈 P / 〉 Operating System: 〈 SELECT id="selOpSys" size="1" name="selOpSys" 〉 〈 OPTION value="Windows 95" 〉Windows 95〈 /OPTION 〉 〈 OPTION selected value="Windows 98" 〉Windows 98〈 /OPTION 〉 〈 OPTION value="Windows NT4" 〉Windows NT4〈 /OPTION 〉 〈 OPTION value="Windows 2000" 〉Windows 2000〈 /OPTION 〉 〈 /SELECT 〉 〈 P / 〉 〈 INPUT type="submit" value="Submit" 〉 〈 /FORM 〉 〈 /BODY 〉 〈 /HTML 〉
用這個ASP+ 代碼創建 〈 FORM 〉 :
〈 FORM runat="server" 〉 ... 〈 /FORM 〉
當頁面被ASP+執行時,到瀏覽器的輸出是:
〈 FORM name="ctrl0" method="post" action="pageone.aspx" id="ctrl0" 〉 ... 〈 /FORM 〉
可以看到action 和 method 屬性是ASP+自動創建的,所以表單中控制的值就會被郵遞回同一頁。 ASP+還為表單增加唯一的id 和 name 屬性,因為我們沒有提供。但是如果你確實指定了這些屬性, 就會使用你所指定的值。
如果包含了method="GET" 屬性,表單的內容就作為查詢字符串的一部分被發送給服務器,同 以前版本的ASP一樣,自動狀態管理就不再有效。
在表單內,用這樣的ASP+ 代碼創建文本框:
〈 INPUT type="text" id="txtName" runat="server" 〉
瀏覽器的結果是這樣的:
〈 INPUT type="text" id="txtName" name="txtName" value="tizzy" 〉
可以看到當表單被提交時,ASP+以控制中的文本值自動增加了value 屬性。它還保留了我們 提供的name 屬性,還以同樣的值增加了一個id屬性。
我們為〈 SELECT 〉 列表寫了以下代碼:
〈 SELECT id="selOpSys" size="1" runat="server" 〉 〈 OPTION 〉Windows 95〈 /OPTION 〉 〈 OPTION 〉Windows 98〈 /OPTION 〉 〈 OPTION 〉Windows NT4〈 /OPTION 〉 〈 OPTION 〉Windows 2000〈 /OPTION 〉 〈 /SELECT 〉
ASP+ 被迫輸出這個HTML,適當的〈 OPTION 〉元素 有一個selected屬性:
〈 SELECT name="selOpSys" id="selOpSys" size="1" 〉 〈 OPTION value="Windows 95" 〉Windows 95〈 /OPTION 〉 〈 OPTION selected value="Windows 98" 〉Windows 98〈 /OPTION 〉 〈 OPTION value="Windows NT4" 〉Windows NT4〈 /OPTION 〉 〈 OPTION value="Windows 2000" 〉Windows 2000〈 /OPTION 〉 〈 /SELECT 〉
同樣創建一個唯一的id 屬性,并自動給〈 OPTION 〉元素增加相匹配的 value 屬性。(如果我們 在頁面中提供了自己的value屬性,將被保留)。
所以你可以看到,并沒有使用什么神奇的手段。都是標準的HTML,沒有客戶機側腳本庫,也 沒有ActiveX 控制或 Java applets。同樣重要的一點是在服務器上根本沒有存儲任何狀態。相反, 只是用標準的方法將值簡單地郵遞給服務器。在頁面發送給客戶之前,通過請求,值由修改服務器 控制的HTML保存并維護。
|