用ASP实现Web表单的数据保持(一)

2008-02-23 05:31:36来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

假如您使用过Internet Explorer 5,那么您可能已有过在Web页面中保持一种状态的想法。其实这不是个新的话题,只但是是个新术语,他所包含的事情您可能已在您的Web 站点上做过一段时间了。在我们所关心的范围内,保持的意思就是包含输入值或经用户配置的Web页面在下一次被打开时保持这些上一次数值的能力。

  事实上,有些浏览器能自动作到这一点--通常来源于用户选择的选项配置。比如说,当您点Back 按钮重新装载这一页时,Navigator 4 在其默认配置中能够记住您在表单的控制项上所使用的值。但是这些还是不太可靠,最好是有一种能够更加可靠地自动处理这个过程的方法。


用隐藏的表单控制域保持数值
  在特定Web 页面之间保持值的常用方法是通过使用嵌入在页面中的HIDDEN 类型控制域来实现。他和一些简单的ASP代码一起使用能够把数值从一页传递到另一页,而不用显示他们。举例说,在一个页面上< FORM > 上的控制:

  < INPUT TYPE="HIDDEN" NAME="hidThis" VALUE="< % = storedValue % >" >

  能够将数值传递到另一个页面,这个页面使用Request.Form摘取上层页面配置的数据。他能够用来配置一个可见控制域的数值,或放置在另一个HIDDEN控制域中并传递到另一页。

  < INPUT TYPE="TEXT" NAME="txtThis" VALUE="< % = Request.Form("hidThis") % >" >

  或

  < INPUT TYPE="HIDDEN" NAME="hidNext" VALUE="< % = Request.Form("hidThis") % >" >

  有一个问题是:假如您装载了一个不传递数值的页面从而破坏了这个链条,他就永远丢失了。对此,我们能够用一些更永久和更可靠的办法。

一个更好的办法--ASP Sessions
  要存储那些我们想要放置在页面的HTML控制中的数值,ASP Sessions提供了一个很明显的办法。事实上,Sessions对于保存什么都是很有用的--甚至是从一个数据源创建的记录集,或我们想在一个用户Sessions中重复使用的对象引用。当每个用户装载一个global.asa文档作用范围内的ASP页面时,ASP都自动启动一个新的用户Session。global.asa文档的作用范围的含义换句话说就是,装载页面的文档夹包含global.asa文档,或在这个文档夹中之上的文档夹中包含global.asa文档(距离根目录更近)。

  当您碰到一些个别数值时,能够在Session 对象中储存他们,然后再根据需要恢复他们。比如,在一个接收标准HTML页面的< FORM > 部分所传递的值的ASP页上,能够用下面代码将他们存储到Session 中:

  Session("thisValue") = Request.Form("thisValue")

  Session("nextValue") = Request.Form("nextValue")

  ... etc ...

  然后,包含< FORM >的页面 (他现在必须是个ASP文档)能够在他装载时恢复这些值:

  < INPUT TYPE="TEXT" NAME="txtThis" VALUE="< % = Session("thisValue") % >" >

  < INPUT TYPE="TEXT" NAME="txtNext" VALUE="< % = Session("nextValue") % >" >

  但是,这需要一些预先的计划,并要注意Session变量名不被别的页面复制和覆盖。而且他不处理非文本类型的控制域,如选择框或选项按钮。要处理这些控制,当选择框或按钮在装载页面时自动配置时,需要给< INPUT >元素增加一个CHECKED属性。

在Sessions中使用数组
  通过将来自页面的值装入存储在用户Sessions中的数组,我们能够比前面的例子做得更好。并且为了防止变量名的冲突,我们要把页面的名用做Sessions变量的名。这样,只有当我们有多个拥有同样名字的页面时,才需要注意到这个问题。

  虽然通过把完整的URL作为session 变量名能够避免这个问题,但是变量名中不能包含斜线,所以必须将斜线转换成其他字符。本文中为了简短起见,我们使用页面名。

  但是您要说了,等一等,session对象不能储存数组,只能储存变量。没问题。当我们把一个数组赋给 session 时,这个session 就包含了一个到数组的变量指针。以后我们能够象恢复一个普通变量相同恢复整个数组。当数组被存储到session 中,我们做不到的是在数组中存取单独的条目--我们首先要释放他。这个过程是:

  Dim arrVals(1, 1) ‘declare a 2 x 2 element array

  arrVals(0, 0) = "this " ‘fill it with values

  arrVals(1, 0) = "is "

  arrVals(0, 1) = "my "

  arrVals(1, 1) = "array "

  Session("myarray") = arrVals ‘and store it in the session

  然后我们用下面的代码恢复他。注意开始您不将变量(在本例中是arrVals)声明为数组:

  arrVals = Session("myarray") ‘retrieve the array

  myString = arrVals(0, 0) & arrVals(1, 0) & arrVals(0, 1) & arrVals(1, 1)

  Response.Write myString ‘gives "this is my array"

  我们的目标是将控制域的值和这些控制的名字储存在一起,存储在一个数组中,这个数组要跟随需要保持数值的页面来命名。换句话说,我们所要寻找的就是:

  Dim arrVals(1, 1)

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 用ASP实现Web表单的数据保持(二)

下一篇: 用ASP统计用户在站点的停留时间