标题标题  显示论坛会员列表名单  搜索论坛搜索  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.1875 seconds.

 
保养品
保养品, Skin Care
www.elady.tw
美材批发
美材, Cosmetic
www.elady.tw/beauty_org
保养品批发
名牌保养品、保养品批发
gb.perfume.com.tw/skincare
饰品批发
饰品、饰品批发
gb.perfume.com.tw/ornament