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

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

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

取得和使用Session 值
  好,现在我们已安全地包装好了我们的控制域值并且把他们存储在用户Session 中。由于每个用户都有唯一的Session ,这个Session 能够维持到他们关闭浏览器或不从服务器装载页面后20分钟,只有这个用户能够看到和使用他们输入的值。这些值被安全地存储在服务器内存中,而不是象我们使用HIDDEN 类型控制来保存这些值时那样,随着每个页面请求频繁地在客户机和服务器之间来回发送。


  事实上,能够用ASP的Session.Abandon 方法来中断一个Session,而通过使用Session.Timeout或编辑注册文档也能够修改timeout 。假如用户装载一个当前global.asa 文档范围以外的页面,如他的文档夹或他的其中一个子文档夹--值也会超出范围。

  我们例子中的页面aspstateform.asp 证实恢复和使用存储在一个session 中的动态数组里的值很简洁并且能够反复使用。这个页面所包含的ASP代码首先获取当前页面的名字,然后用他从session对象中恢复恢复一个动态数组。

  'get the name of the current page

  strScriptName = Request.ServerVariables("SCRIPT_NAME")

  strScriptName = Mid(strScriptName, InstrRev(strScriptName, "/") 1)

  'retrieve the array from the Session variables

  arrVals = Session(strScriptName)

  这样我们就解决了根据需求从数组中恢复个别控制域值的问题。我们所选择的方法是在页面中使用ASP的一个定制函数。这个函数的名字是GetSavedValue ,下面就来讲解他。

GetSavedValue 函数
  给出了页面上的一个控制名,GetSavedValue 就返回一个文本字符串,这个字符串就是将控制配置成和最后一次提交给服务器相同的状态所需要的值。这是通过从存储的数组中提取值来完成的。但是我们已发现要将选择框和选项按钮分开处理,要给函数增加第二个参数。这是个字符串值,我们将他和数组中存储的值进行匹配。

  Function GetSavedValue(strControlName, strMatchValue)

  我们需要做的第一件事是要查看我们是否确实得到了一些值,假如是的话,有多少值。假如这一页是在一个session中第一次被装载,那么在Session 对象中就不会有任何为他保存的数组。假如我们试图用UBound函数来得到数列的大小,就会得到一个错误。代码用On Error Resume Next 来抑制错误信息,然后查看Err 对象看看是否真的发生了错误。假如是就退出。注意我们如何指明希望得到哪一维的大小--在本例中是第二维。假如我们忽略了这个参数,按照默认配置,UBound 函数就会返回第一维的大小。

  On Error Resume Next

  'find the number of values in the array

  intValCount = UBound(arrVals, 2)

  'if there is no array stored in the Session an error

  'will have been generated by the UBound function

  If Err.Number < > 0 Then Exit Function

  假如我们得到了这个值,那么现在就一定要有一个数组。我们在第一维中存储的控制名中循环,直到找到函数中第一个参数提供的控制名相匹配的。假如找到了,就要寻找一下,看看在函数的第二个参数中是否提供了一个“匹配值”,--假如是,我们就知道这是个选择框或选项按钮。在这种情况下,我们就将“匹配值”和数组中第二维的值比较(存储的控制域的VALUE),假如他们相同就返回" CHECKED ”,假如不同就返回一个空字符串。同时,假如没有提供第二个参数,我们就简单地返回数列中第二维的值。

'return the value for a given control name

For intLoop = 0 To intValCount

  'see if the name of the control is in the array

  If LCase(arrVals(0, intLoop)) = LCase(strControlName) Then

   'see if we have to match a particular value

   '(for use with a check box or an option button)

   If strMatchValue < > "" Then

    'see if the value does match that specified

    If LCase(strMatchValue) = LCase(arrVals(1, intLoop)) Then

     GetSavedValue = "CHECKED"

    Else

     GetSavedValue = ""

    End If

   Else

    'just return the value from the array

    GetSavedValue = arrVals(1, intLoop)

   End If

   Exit Function

  End If

Next

End Function

  在两个比较测试中,我们的检查和HTML语法是大小写不敏感的。假如需要大小写敏感,能够去掉LCase 函数调用。

使用GetSavedValue 函数

标签:

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

上一篇: 使用ASP和Word进行服务器端拼写检查

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