我正在尝试访问Session.Contents的值,其中有些似乎是字符串数组。
我尝试使用下面的代码直接获取这些数组中的值:
Session.Contents.Item(sessItem)(1)
两种方法都将引发错误。基于similar posts,看来这在VBScript中是不可能的吗?
第92行对应于
For each x in Session.Contents.Item(sessItem)
我从Microsoft Documentation获得了循环,但是示例代码并未使objArray变暗,效果很好。
Dim sessItem,x
For Each sessItem In Session.Contents
If IsArray(Session.Contents.Item(sessItem)) Then
Response.Write("Type of sessItem contents = " & TypeName(Session.Contents(sessItem)) & " VarType = " & VarType(Session.Contents(sessItem)) &"<br>")
Response.write sessItem & " : an array of the following " & UBound(Session.Contents.Item(sessItem))+1 & " items <BR>"
For each x in Session.Contents.Item(sessItem)
Response.write "- " & x & "<BR>"
Next
ElseIf IsObject(Session.Contents.Item(sessItem)) Then
Response.write(sessItem & " : Session object cannot be displayed." & "<BR>")
Else
'Response.write(sessItem & " : " & CStr(Session.Contents.Item(sessItem)) & "<BR>")
End If
Next
sessItem
内容的类型为String()
(VarType = 8200)。
Cached_AccountDetails:以下11个项目的数组
Microsoft VBScript运行时错误'800a000d'
类型不匹配
Statement.asp,第92行
答案 0 :(得分:1)
我认为您还需要检查Null值,还需要对Nothing
和嵌套/混合类型的数组进行更好的处理,最后需要通过{{1}进行输出转义},以便正确显示带有HTML特殊字符的值。
值得编写一个递归的实用程序函数,该函数可以转储任何类型的值(除了Server.HtmlEncode()
以外的任何其他类型的数组,因为VBScript无法处理它们):
Variant
用法很简单:
Sub Dump(value)
Dim isCollection, i
On Error Resume Next
For Each i In value
isCollection = (Err.Number = 0) And Not IsArray(value)
Exit For
Next
On Error GoTo 0
If isCollection Then
Response.Write "<i>Collection</i><br>"
For Each i In value
Response.Write "<b>" & Server.HtmlEncode(i) & "</b> : "
Dump value(i)
Response.Write "<br>"
Next
ElseIf IsArray(value) Then
Response.Write "<i>" & Replace(TypeName(value), "()", "(" & (UBound(value) + 1) & ")") & "</i><br>"
If TypeName(value) = "Variant()" Then
For i = LBound(value) To UBound(value)
Response.Write i & ": "
Dump value(i)
Response.Write "<br>"
Next
Else
Response.Write "(cannot display non-variant arrays)"
End If
Else
Response.Write "<i>" & TypeName(value) & "</i> "
If IsObject(value) Then
If Not value Is Nothing Then Response.Write "(cannot be displayed)"
ElseIf Not IsNull(value) Then
Response.Write Server.HtmlEncode(value)
End If
End If
End Sub
我测试过的各种东西的输出:
集合
FOO :字符串 BLA
BAR : 布尔值 True
BAZ :整数 42
QUX : Variant(4)
0:整数 1
1:整数 2
2: Double 3,14159265
3:日期 2018年12月17日 19:22:15
WALDO :空
FRED : FileSystemObject (无法显示)
QUUX : 没事
缺少:嵌套数组的嵌套输出。可以使用Dump Session.Contents
/ <ul>
完成。