Posted: 2005/1月/07 9:37上午 | IP記錄
|
|
|
在這章中,你會學到怎樣處理多個主頁。在第一部分,你會學到怎樣從HTML的Form中接受信息。在第二部分中,將會討論一些接 受和處理Query字段的方法,第三部分,你會學會如何引導用戶到一個新的主頁地址,第四部分,則是在Active Server Pages中如何包容另一個Active Server Page。
從HTML的Form中接受信息
一般來說,你應當將HTML的FORM作為最主要的主頁間傳遞信息的手段,使用戶能夠和你的Active Server Page充分實現交互和信息傳遞的最可靠手段就是它。
注意
如果你需要先去瞭解一下Form的類型和創建方法,請先到本書的第6章。
注意
利用Form來傳遞用戶的信息是最可靠的,因為它適用於任何瀏覽器,你當然也可以選擇其他很多種方法,例如Java applet, ActiveX控件,甚至是Adobe Acrodat文件創建,但是如果你的網站希望針對的是廣域網上更多層次的使用者,筆者建議還是應當以HTML的Form為主。
假設你希望用戶在使用網站前進行一個註冊過程,那麼顯然你應當使用一個HTML Form, 如下面這個例子:
<HTML>
<HEAD><TITLE>註冊頁</TITLE></HEAD>
<BODY>
<h4>邁至科網絡ASP教程註冊頁示例:</h4>
<FORM Method=「post」 Action=「reresults.asp」>
<p>請輸入姓名:<input name=「username」 type=「text」><br>
所在公司:<input name=「usercompany」 type=「text」>
<br>
<input type=submit value=「 確認註冊 」>
</body>
</html>
那麼相信看到這裡的讀者應當十分熟悉HTML了,顯示結果應當想像到了(見圖15.1)。(如果不是的話,請先看本書第6章或者 其他主頁入門書籍。)那麼主頁的介紹就不在多寫了,請注意這裡面的form的method=post,也就是說,text文本框 內容在submit按鈕點擊確認後會傳送到服務端,由於form的內容將作為HTTP請求的一部分,那麼細心的讀者應當已經意識 到可以用Active Server Page的Request對像來處理了,針對這種目的,Active Server Page的Request對像特別指定了一個form集合來進行相關處理。form集合就可以包含所有添入HTML Form的信息。
圖15.1 註冊表單的一個簡單例子
Form集合的每一個鍵都對應於HTML Form的輸入內容。例如,上面那個簡單的例子裡面只有兩個鍵:username和usercompany;分別對應於兩個文本 框。
單獨取出一個鍵值的方式見下面這個腳本(reresults.asp對應於form的action):
<HTML>
<HEAD><TITLE>註冊處理1</TITLE></HEAD>
<BODY>
邁至科技術人員謝謝<%=Request.form(「username」)%>的註冊!
</body>
</HTML>
這頁執行的時候,註冊用戶的姓名就會顯示在瀏覽器上,特別注意對應於上面HTML的Form中的Action必須是指向這個腳本 。
還有一點必須提醒的是,在HTML的Form中的文本框如果是空的,那麼腳本執行就會報錯,當然對這種情況的判斷和相應附加約束 也很簡單,但是現在為了簡化目前的主要問題,還沒有涉及到,希望用戶有所瞭解,在正式製作這種應用時,要盡量避免出現對form 中某些區域空的情況沒有約束或判斷的現象。
很多互聯網上都使用了附加頁來感謝客戶的註冊等等,通常這就需要瞭解上一個主頁的FORM中的內容,這種情況下,就需要requ est.form了。
Form集合多個內容的處理顯示
如果想把上個主頁form中所有內容顯示出來,有好幾種方法,如果你希望循環的將所有內容依次顯示,可以參照下例:
<%
FOR EACH name IN Request.Form
Response.Write(「<BR>「&name&」=「)
Response.Write(「Request.Form(name))
NEXT
%>
那麼這個腳本就會依次將上個Form中傳遞的鍵名和相應值成對顯示出來:例如,如果邁至科公司的謝建雲進行了註冊,那麼顯示結果 為:
USERNAME=謝建雲
USERCOMPANY=邁至科公司
請注意這裡面的鍵名是大寫的,其實在Form的集合中,盡可以不去理會這些,因為大小寫是通用的,也就是說,UserName和 uSeRnaMe對於服務端處理是完全一樣的。
除了FOR EACH循環外,你當然也可以用For ...Next循環,下面的腳本也會顯示每個鍵的值。(但是不會顯示鍵的名稱)
<%
FOR I=1 to Request.form.Count
Response.Write(「<BR>「&Request.form(i))
NEXT
%>
在這裡面Count屬性可以用來瞭解具有Form的主頁在提交時具體有多少個Form域被填寫或選擇(鍵)。
最後,對於如果Form集合中提交項,你只希望看到的是簡單的URL-encoded字串(在程序調試過程中,這幾乎是肯定會用 的),還可以只是用下面這個腳本:
<%=Request.Form%>
下面是顯示結果,(依然假設為邁至科公司謝建雲註冊,同時注意顯示為小寫)
username=謝建雲&usercompany=邁至科公司
這裡面,Form域名得到了保持,因為這時HTTP的Post內容尚未經過解析。
FORM的域對應多值的處理
有時,Form的某個域對應多個值,例如,對於checkbox類型來說,實現多項選擇是最拿手的,看下面這個HTML Form。
<FORM METHOD=「POST」 ACTION=「regresults.asp」>
請問您是怎樣瞭解到邁至科公司的?
<br><input name=「HowHear」 Type=checkbox Value=「Newspaper」>
新聞報紙以及廣告
<br><input name=「HowHear」 Type=checkbox Value=「SearchEngine」>
站點搜索引擎
<br><input name=「HowHear」 Type=checkbox Value=「Friend」>
朋友介紹
<br><input name=「HowHear」 Type=checkbox Value=「Stumble」>
網上衝浪時偶然進入
<p><input type=submit value=「 確認進行了上述選擇 」>
</form>
這個form就可以用來考察用戶瞭解本公司的途徑,這樣就可以認識到各種媒體的不同效應。不過很可能用戶有多種途徑瞭解該公司, 那麼就允許用戶在多個checkbox中劃上對勾(如果單選,應當用radio類型),這時,HowHear鍵就一次對應了多個 值(見圖15.2)。
圖15.2 多重選擇的表單例子
你怎樣才能把它們都接受出來呢,這時你可以利用form集合的一個附加參數。見下面這個例子:(請注意這個程序名稱必須是reg results.asp對應於上一個程序的Form Action=的文件名)
<HTML>
<HEAD><TITLE>你的響應</TITLE></HEAD>
<BODY>
根據你的回應,我們知道你瞭解我們公司有
<%=Request.Form(「HowHear」).Count%>種途徑。
<p>你瞭解我們站點是依據:
<%
FOR EACH way in Request.Form(「HowHear」)
Response.Write(「<p>「&way)
NEXT
%>
</BODY>
</HTML>
在這個腳本中,Count屬性用來檢驗復選框被選擇的數目,在這裡面與前面不同的是,count只是計算復選框中的選擇數目而不 是所有的form域提交的數目。那麼這裡面調用是:Request.Form(「HowHear」).count,帶著參數」H owHear」。
由於使用了FOR EACH循環,那麼用戶的所有選擇都會顯示出來(顯示的是Value的值,既:Newspaper、SearchEngine等 )
Text Area的處理
你可以利用同樣方式接受Text Area類型的文本內容。請注意VBScript的變量允許很長,而不是向其他許多種語言那樣以255為限制。
下面是一個Text Area類型的例子:
<Form Mehthod=「POST」 action=「response.asp」>
請輸入您對我們邁至科網站的意見和建議:
<p>
<TextArea Name=「feedback」 cols=30 rows=10></textarea>
<p><input type=submit value=「 確認發送 「>
</form>
這個主頁利用text area類型作為反饋表,這是很常用的,如果你希望顯示反饋表內容,如下:
<HTML>
<HEAD><TITLE>反饋響應</TITLE></HEAD>
<BODY>
謝謝您的意見和建議,你的建議為:
<p>
<%=Request.Form(「FeedBack」)%>
</BODY>
</HTML>
Form中對HTML標記的處理
用戶可以在文本輸入區中輸入一行帶有HTML標記的文字,或者甚至在Text Area中輸入多行HTML語言,你是無法阻止他的輸入的。
有些時候,這種操作是允許甚至鼓勵的,比如說你開闢了基於瀏覽器的網上論壇(例如邁至科網絡的技術論壇),甚至就是網上主頁開發 輔助系統,那麼用戶自己定義一些文字顏色,添加<hr>這樣的分行符等等都沒有任何問題。
但是在一些場合下,例如在技術論壇中你希望解答一個關於主頁的問題而輸入了一段主頁代碼,你應當是希望用戶看到的是這段代碼而不 是經服務端解釋後的這段HTML主頁,例如,你希望用戶看到 「<b>這是粗體</b>」而不是「這是粗體」,那麼,怎樣實現呢?
幸運的是,Active Server Pages提供了Server.cfmLEncode()方法來處理這種目的的操作。例如,你就可以使用
<%=Server.cfmLEncode(「<B>這是粗體</B>「)%>
這樣,顯示的結果就是HTML代碼而不是解釋後的HTML主頁。
注意
如果想要完全瞭解HTML字符代碼,參見本書結尾的附錄D。
測試form域是否存在
在前面曾經提到過你應當檢查用戶是否正確的填寫了各種註冊表,例如有些填寫域你希望用戶不要空置。那麼你可以利用下面這種腳本來 進行這樣的檢驗(還是和本章初始的註冊頁對應)。
<%
IF Request.Form(「username」)=「」 THEN
Response.Write(「你必須輸入姓名」)
ELSE
Response.Write(「謝謝註冊」)
END IF
%>
這個腳本就是測試了用戶是否填寫了姓名項,檢驗過程是與一個0長度的字段比較,如果用戶沒有填寫,那麼等式成立。
作為正式發佈的站點,你當然應當引導用戶返回上頁,在後面章節中,涉及到了這種處理。
|