標題標題  顯示論壇會員列表名單  搜索論壇搜索  HelpHelp
  注冊注冊  登入登入
ASP教學區
 DoReMe : ASP教學區
主題 話題: 第十五章 對多於一個Active Server Page進行處理 回復發表新主題
作者
貼子內容 << Prev Topic下一個主題 >>
bibi
Senior Member
Senior Member


加入: 2005/1月/07
Online Status: Offline
回復: 103
Posted: 2005/1月/07 9:37上午 | IP記錄 引用 bibi

在這章中,你會學到怎樣處理多個主頁。在第一部分,你會學到怎樣從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長度的字段比較,如果用戶沒有填寫,那麼等式成立。

作為正式發佈的站點,你當然應當引導用戶返回上頁,在後面章節中,涉及到了這種處理。

Back to Top 查看 bibi's 資料 搜索其他貼子 bibi 訪問 bibi's
 
bibi
Senior Member
Senior Member


加入: 2005/1月/07
Online Status: Offline
回復: 103
Posted: 2005/1月/07 9:37上午 | IP記錄 引用 bibi

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內容尚未經過解析。

Back to Top 查看 bibi's 資料 搜索其他貼子 bibi 訪問 bibi's
 
bibi
Senior Member
Senior Member


加入: 2005/1月/07
Online Status: Offline
回復: 103
Posted: 2005/1月/07 9:38上午 | IP記錄 引用 bibi

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等 )

Back to Top 查看 bibi's 資料 搜索其他貼子 bibi 訪問 bibi's
 
bibi
Senior Member
Senior Member


加入: 2005/1月/07
Online Status: Offline
回復: 103
Posted: 2005/1月/07 9:38上午 | IP記錄 引用 bibi

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長度的字段比較,如果用戶沒有填寫,那麼等式成立。

作為正式發佈的站點,你當然應當引導用戶返回上頁,在後面章節中,涉及到了這種處理。

Back to Top 查看 bibi's 資料 搜索其他貼子 bibi 訪問 bibi's
 
bibi
Senior Member
Senior Member


加入: 2005/1月/07
Online Status: Offline
回復: 103
Posted: 2005/1月/07 9:38上午 | IP記錄 引用 bibi

接受一個Query字段

在URL地址後面用問好帶著Query字段來傳遞參數也是很常用的,如果你曾經使用過諸如Alta Vista這樣的網絡搜索引擎,你就會對這種方式十分熟悉。

你可以在指定聯接中利用?帶Query字段來傳遞參數信息,例如下例:

<HTML>

<HEAD><TITLE>Query字段示例</TITLE></HEAD> ;

<BODY>

<A HREF=「http://www.aspsite.com/newpage.asp?Click=YES」>點擊這裡!</A>

</BODY>

</HTML>

在這個例子中,聯接地址是newpage.asp。不過,這個連接包括一個Query字段,

「Click=Yes」傳遞到了newpage.asp中去。

你也可以在瀏覽器的地址攔中直接敲入主頁後面帶上Query字段的方法來進行信息傳遞,對於服務端來說,二者是沒有區別的。例如 下面:

http://www.aspsite.com/newpage.asp?Click=Yes

進行菜單類選擇時Query字段是非常有用的。如果你在一個主頁中指向不同內容而又希望在一個主頁中處理,那麼你就可以利用它。 例如下面這個例子:

<HTML>

<HEAD><TITLE>產品列表</TITLE></HEAD>

<BODY>

<H3>歡迎進入邁至科網上商店</H3>

請選擇你要訂購的名錄:

<p><a href=「purchase.asp?ITEM=1」>用戶手冊</a>

<p><a href=「purchase.asp?ITEM=2」>打字機</a>

<p><a href=「purchase.asp?ITEM=3」>馬蹄鐵</a>

</body>

</html>

雖然用戶可以進行多種選擇,而且每種選擇都連接不同內容,但是實際上指向一個Active Server Page,只是Query字段不同。

圖15.3 訂購列表頁

 

 

 

 

 

 

 

 

 

 

 

 

 

 

用戶可以自由選擇點擊連接,那麼根據Query字段來判斷顯示不同內容。

你可以用Active Server Pages的Request對象的QueryString集合來接受這些信息,和Form集合的調用方法一樣。要想接受一個特定 的Query字段內容,你只需要寫出Query字段的名稱就行了。這有一個例子(對應於上面的產品列表主頁):

<HTML>

<HEAD><TITLE>訂購</TITLE></HEAD>

<BODY>

<%

SELECT CASE Request.QueryString(「item」)

CASE 「1」

Response.Write(「謝謝您訂購了用戶手冊。」)

CASE 「2」

Response.Write(「謝謝您訂購了打字機。」)

CASE 「3」

Response.Write(「謝謝您訂購了馬蹄鐵。」)

END SELECT

%>

</BODY>

</HTML>

在這裡QueryString集合被用來檢查是哪一個連接被點擊。利用SELECT CASE語句來根據Query字段作出合適的響應,例如,用戶選擇了「用戶手冊」,那麼用戶收到的顯示信息是「謝謝您訂購了用戶 手冊」。

Back to Top 查看 bibi's 資料 搜索其他貼子 bibi 訪問 bibi's
 
bibi
Senior Member
Senior Member


加入: 2005/1月/07
Online Status: Offline
回復: 103
Posted: 2005/1月/07 9:39上午 | IP記錄 引用 bibi

對Query字段進行Encode操作

利用一個Query字段在不同主頁間傳遞信息時必須進行Encode操作,因為如果不這樣做,你很可能使得接受信息的那邊接受到 一些你所不期望的奇怪字串。

注意

其實如果Query字段中沒有一些特殊字符,例如空格和標點符號等,那麼也可以不進行Encode操作,例如上個小節的例子就是 。

其實,這種Encode操作是十分容易的,有一個特定的方法來執行這種操作:那就是Server.URLEncode()方法, 看下面這個例子:

<a href=「response.asp?Message=<%=Server.URLEncode(「This Query String has been URL encoded.」)%>「>點擊這裡</a>

請注意不要對Query字段的名稱以及等號進行Encode操作,你只需要將其值進行Encode操作就可以了。

進行了encode操作後,Query字段如下:

Message=This+Query+String+has+been+URL+encoded%2E

你並不需要考慮對上面的字串再進行解碼,Active Server Page會自動進行這樣的處理。例如,假設response.asp中有這樣的腳本:

<%=Request.QueryString(「message」)%>

這時,顯示結果為:

This Query String has been URL encoded.

Back to Top 查看 bibi's 資料 搜索其他貼子 bibi 訪問 bibi's
 
bibi
Senior Member
Senior Member


加入: 2005/1月/07
Online Status: Offline
回復: 103
Posted: 2005/1月/07 9:39上午 | IP記錄 引用 bibi

多參數以及多值的Query字段處理

你可以通過Query字段傳遞不止一個鍵值對,在傳遞多個參數時,僅需要使用連接符(&)就可以了。下面的例子傳遞了兩 個參數:

<a href=「response.asp?firstparam=<%=Server.URLEncode(「This is the first parameter.」)%>&<Secondparam=<%=Server.URLEncode (「This is the second parameter.」)%>「>點擊這裡</a>

這個連接的Query字段就包括了兩個參數(鍵值對),鍵名分別是FirstParam和SecondParam。值分別對應於 」This is the first parameter.」和」This is the second parameter.」, URLEncode()方法被用來將這些值在傳遞中保持正確格式。

在Response.asp中,你可以用下面的方法顯示兩個參數:

<p><%=Request.QueryString(「FirstParam」)%>

<p><%=Request.QueryString(「SecondParam」)%>

可以看出,接受信息還是老方法,輸出結果為:

This is the first parameter.

This is the second parameter.

你一樣可以利用一個參數對應多個值,只需要在query字段中將參數名稱寫多遍就可以了,例如下面這個例子:

<A HREF=「response.asp?OnlyParam=<%=Server.URLEncode(「This is the first value of the only parameter.」)%>&OnlyParam=<%=Server.URLEncode(「This is the second value of the only parameter.」)%>「>點擊這裡</a>

在這裡面,參數(鍵)OnlyParam對應於兩個值,分別是This is the first value of the only parameter.」和「This is the second value of the only parameter.」,那麼Count屬性又可以在這裡面來檢查到底有多少個值,同時下面的例子用For Each來顯示所有的值。

這個OnlyParam參數有<%=Request.QueryString(「OnlyParam」).Count%& gt;個值,

<p>分別是:

<%

FOR EACH pvalue IN Request.QueryString(「OnlyParam」)

Response.Write(「<br>「&pvalue)

NEXT

%>

FOR EACH循環會將所有值全部顯示出來,如果這個參數是不存在的,那麼count屬性會顯示0個值同時循環不會執行。

Back to Top 查看 bibi's 資料 搜索其他貼子 bibi 訪問 bibi's
 
bibi
Senior Member
Senior Member


加入: 2005/1月/07
Online Status: Offline
回復: 103
Posted: 2005/1月/07 9:39上午 | IP記錄 引用 bibi

將QueryString集合所有參數一併輸出

和Form傳遞參數十分類似,你可以選擇三種方法,下面的腳本是利用For Each循環:

<%

FOR EACH QSParam IN Request.QueryString

Response.Write(「<br>&QSParam&」=「)

Response.Write(Request.QueryString(QSParam)

NEXT

%>

除了使用FOR EACH循環外,你還可以使用FOR...NEXT循環來進行這種操作。這樣的話,首先需要利用Count屬性來瞭解具體值的數 量,下面這個例子:

<%

FOR I=1 TO Request.QueryString.Count

Response.Write(「<BR>「&Request.QueryString(i))

NEXT

%>

最終,你還可以利用最簡單的方法來接受沒有解碼的Query字段。見下面這個例子(如圖15.4):

<%=Request.QueryString%>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

圖15.4不分割查詢字符串

注意

其實你還可以利用Server變量QUERY_STRING來接受沒有解碼的Query字段。第十四章中有所介紹。

Back to Top 查看 bibi's 資料 搜索其他貼子 bibi 訪問 bibi's
 
bibi
Senior Member
Senior Member


加入: 2005/1月/07
Online Status: Offline
回復: 103
Posted: 2005/1月/07 9:40上午 | IP記錄 引用 bibi

什麼情況下不要使用Query字段

Query字段在主頁間傳遞參數時是非常有用的,但是兩種場合還是不要使用。一種是傳遞隱含信息,另一種是傳遞大量信息。

從某種意義上說,Query字段是根本無法隱含的,它總是顯示這些Query字段。這就意味著如果用來傳遞用戶密碼就十分糟糕, 任何人如果在旁邊路過並瞥了一眼都是很危險的。

如果傳遞的數據量比較大,用Query字段也不好辦,對於不同的瀏覽器,這種信息傳遞的大小是有不同的限制的,例如IE4.0是 無法處理超過2000個字符的query字段。如果URL連接帶的Query字段超過這個長度,瀏覽器就無法正確處理。

你有時無法確認長度具體有多少,因為實際上對於瀏覽器限制的長度是指瀏覽器地址欄中所能顯示並發送的最大長度,也就是URL地址 和Query字段的總長度。

另外,在進行Encode操作中,還有一些諸如「%2E」這樣的附加的字符。這種長度的添加也必須在瀏覽器長度限制之內。

再有,很多瀏覽器所限定的長度還遠遠達不到IE4.0的2000個字符的限制,尤其是早期的版本,因此,一般說來,如果傳遞數據 量比較大,就不要利用這種方式了。

作為總結,利用Query字段傳遞的信息都應當是簡潔的和非保密的,如果有大量數據需要傳遞,那麼可以利用HTTP的Form中 的hidden類型,詳細介紹參看有關HTML的介紹。在這裡值得解釋的是,HTTP協議在傳遞form時比傳遞Quer字段有 效的多。

Back to Top 查看 bibi's 資料 搜索其他貼子 bibi 訪問 bibi's
 
bibi
Senior Member
Senior Member


加入: 2005/1月/07
Online Status: Offline
回復: 103
Posted: 2005/1月/07 9:40上午 | IP記錄 引用 bibi

重引導用戶到另一個主頁位置

在很多場合下,你需要引導用戶到另一個主頁上,例如,用戶註冊單沒有填寫完全就進行了提交,那麼提交程序會自動將用戶返回到註冊 頁等等。

在Active Server Pages中有一個非常簡單的方法了來處理,那就是Response.Redirect方法,看下面這個例子:

<%

IF Request.Form(「UserName」)=「」 THEN Response.Redirect」register.asp」

%>

<HTML>

<HEAD><TITLE>註冊提交結果</TITLE></HEAD>

<BODY>

謝謝您、<%=Request.Form(「UserName」)%>註冊邁至科網絡教程示例。

</BODY>

</HTML>

假設一個用戶沒有填寫姓名就提交了註冊表,那麼第一個腳本的判斷就會將用戶重新引導回註冊頁面。

你必須在瀏覽器顯示任何文本前使用Response.Redirect方法,最好是在<HTML>標記之前進行使用 ,否則就只能使用Buffer輸出(參見14章有關小節)。

你可以利用Response.Redirect方法來指向任何合法的網址,無論它是HTML主頁還是Active Server Pages甚至Cold Fusion等,也無論它處於當前服務器還是局域網甚至廣域網上的任何一台任何操作系統和HTTP Server的服務器(甚至是沒有Active Server Pages的也可以)。其實執行過程是這樣的,還記得前面提到的狀態碼嗎?當Response.Redirect方法執行後,服 務器的響應是發送回一個302 Object Moved的狀態碼,同時在Header上添加Location和重定向的URL地址,瀏覽器接受後就自動轉向了新的地址。

注意

其實Response.Redirect」URL」就等效於下面的兩行:

<%

Response.Status=「302 Object Moved」

Response.AddHeader」Location」,」URL」

%>

如果想要瞭解有關Header各種字段含義,請參閱本書附錄A「ASP對象及組件快速參考」。

不過現在,這種操作並不順利,老版本的瀏覽器通常無法處理這種狀態碼,更糟的是,新的瀏覽器諸如NetScape4.0也無法自 動響應,而是會顯示如圖15.5所示信息。

圖15.5 服務器重定向結果

 

 

 

 

 

 

 

 

 

 

 

 

 

 

這顯然是站點製作人所不願意看到的,用戶也會很不習慣,所以我們推薦下面的方法:

Back to Top 查看 bibi's 資料 搜索其他貼子 bibi 訪問 bibi's
 

of 2 下一頁 >>
  回復發表新主題
顯示可打印的頁面 顯示可打印的頁面

論壇跳轉
不能 張貼新論題在這個討論版
不能 回應論題在這個討論版
不能 刪除你的發言在這個討論版
不能 編輯你的發言在這個討論版
不能 新增投票標題在這個討論版
不能 在這個討論版投票

Edit by doreme Forums version 2004
Welcome ©2001-2004 doreme Guide

This page was generated in 0.1560 seconds.

 
保養品
保養品, Skin Care
www.elady.tw
美材批發
美材, Cosmetic
www.elady.tw/beauty_org
保養品批發
名牌保養品、保養品批發
gb.perfume.com.tw/skincare
飾品批發
飾品、飾品批發
gb.perfume.com.tw/ornament