Object 将字典脚本对象作为参数传递

Object 将字典脚本对象作为参数传递,object,dictionary,vbscript,scripting,asp-classic,Object,Dictionary,Vbscript,Scripting,Asp Classic,我声明了这样一个对象: dim oTest oTest = CreateObject("Scripting.Dictionary") oTest.Add ("a", "Red") oTest.Add ("b", "Blue") response.redirect ("nextpage.aspx?username=fred&paramstring=" & oTest) 我想将这些信息传递到另一个页面,如下所示: dim oTest oTest = CreateObject("S

我声明了这样一个对象:

dim oTest
oTest = CreateObject("Scripting.Dictionary")
oTest.Add ("a", "Red")
oTest.Add ("b", "Blue")
response.redirect ("nextpage.aspx?username=fred&paramstring=" & oTest)
我想将这些信息传递到另一个页面,如下所示:

dim oTest
oTest = CreateObject("Scripting.Dictionary")
oTest.Add ("a", "Red")
oTest.Add ("b", "Blue")
response.redirect ("nextpage.aspx?username=fred&paramstring=" & oTest)
但我得到了一个错误:

未为字符串“nextpage.aspx?username=fred”和类型“Dictionary”定义运算符“&”


有人能帮忙吗?

脚本编写词典有两种可能有用的方法

  • .Keys()
    -返回键的
    数组
  • .Items()-返回项目的
    数组`
使用这两个数组,您可以遍历它们并构建一个字符串。这样的办法应该行得通

用于(反)序列化字典的函数:

Option Explicit

Const csSD1 = "&"
Const csSD2 = "="

' make dictionary from string containing serialized dictionary (key-csSD2-value-csSD1-...)
Function s2d(s)
  Dim d : Set d = CreateObject("Scripting.Dictionary")
  Dim e, p
  For Each e In Split(s, csSD1)
      p = Split(e, csSD2)
      d(p(0)) = p(1)
  Next
  Set s2d = d
End Function

' serialize dictionary to string (key-csSD2-value-csSD1-...)
Function d2s(d)
  Dim a : a = d.Keys
  Dim i
  For i = 0 To UBound(a)
       a(i) = Join(Array(a(i), d(a(i))), csSD2)
  Next
  d2s = Join(a, csSD1)
End Function

Dim s : s = "a=red&b=blue"
Dim d : Set d = s2d(s)
If s = d2s(d) Then WScript.Echo "ok"

出现错误的原因是对象
oTest
无法直接传递到
String
变量,VBScript/Classic ASP不支持序列化对象,您必须使用VBScript中提供的各种函数/方法自己进行序列化。对于VBScript,您遇到的错误很奇怪,并用parantise调用方法。您确定这是一个ASP/VBScript问题吗?在我看来,这似乎是一个Visual Basic.NET(ASP.NET)问题。不,我使用的是经典的ASP。我们已经安装了.NET库,但我不知道代码是否使用了它们。似乎我不能使用Dictionary对象在页面之间传递参数:看起来我被连接的字符串卡住了。我希望使用更复杂的东西。但我感谢你的帮助和反馈!好的,这是我能做的。在原始页面上,我将对象分配给一个会话变量:session(“testobject”)=oTest,然后在进入下一个页面后,我执行以下操作:dim-oTest-oTest=session(“testobject”),然后我可以使用如下值:oTest.Item(“a”)这几乎完成了我最初需要的所有操作!谢谢大家现在我很确定你在VB.Net上。1-您正在重定向到一个名为
nextpage.aspx
的页面,
aspx
是一个asp.net扩展。2-在VBScript中,由于错误,您的代码无法编译
Microsoft VBScript编译错误:通过寻址
oTest.Add(
lines.3-
oTest=CreateObject(…
VBScript
中不是有效的对象分配,它应该是
Set-oTest=CreateObject(“..
。更多证据?是的,您可以在会话中存储该对象,它适用于ASP Classic和ASP.Net。谢谢你们。看起来Dictionary对象一点帮助都没有,因为我必须在移动到另一页之前将其拆下。我将不得不重新考虑!我感谢您的帮助!必须转义特殊字符,否则,
s2d
可能返回不正确的键值对。