Asp classic VBScript:在会话变量中读取字典

Asp classic VBScript:在会话变量中读取字典,asp-classic,vbscript,Asp Classic,Vbscript,我试图将表项列表存储在会话变量中,以跟踪该项复选框的最后状态(选中或未选中) 我首先将用户第一次加载页面时的所有值设置为未选中。这部分代码似乎有效: model = Request.querystring("model") If IsEmpty(Session(model)) Then Set dicX = CreateObject("Scripting.Dictionary") sqlStr = "SELECT DISTINCT level FROM IFPDB WHER

我试图将表项列表存储在会话变量中,以跟踪该项复选框的最后状态(选中或未选中)

我首先将用户第一次加载页面时的所有值设置为未选中。这部分代码似乎有效:

model = Request.querystring("model")

If IsEmpty(Session(model)) Then

    Set dicX = CreateObject("Scripting.Dictionary")

    sqlStr = "SELECT DISTINCT level FROM IFPDB WHERE IFPDB.model='"
    sqlStr = sqlStr & model
    sqlStr = sqlStr & "'"

    Set objRS = objConn.Execute(sqlStr)

    ' For each unique level get all of that levels menu names       
    Do While (Not objRS.EOF)
        level = objRS("level")
        dicX.Add level, CreateObject("Scripting.Dictionary")

        ' for each menu name set the initial state to OFF
        sqlStr2 = "SELECT * FROM IFPDB WHERE IFPDB.model='"
        sqlStr2 = sqlStr2 & model
        sqlStr2 = sqlStr2 & "' AND IFPDB.level='"
        sqlStr2 = sqlStr2 & level_name
        sqlStr2 = sqlStr2 & "'"

        Set objRS2 = objConn.Execute(sqlStr2)

        Do While (Not objRS2.EOF)
            menu_item = objRS2("menu_names")
            dicX(level).Add menu_item, CreateObject("Scripting.Dictionary")

            ' add a dictionary item
            dicX(level)(menu_item).Add "menu_state", "UNCHECKED"

            objRS2.MoveNext
        Loop

        objRS.MoveNext
    Loop

    Set Session(model) = dicX
End If
当我尝试读取这些值时,问题就出现了。无论我如何尝试访问它们,我都会得到“Object_required:'[undefined]”

我试过了

' Check the last state of this option
menu_name = objResult("menu_names")
response.write(menu_name & "<br>") ' writes correctly

If Not IsEmpty(Session(model))
 my_state = Session(model)(current_level)(menu_name).Item("menu_state")   ' dies here
 response.write(my_state & "<br>")
End If

' tried these as well
my_state = Session(model)(current_level)(menu_name)("menu_state")
'and
my_state = Session(model)(current_level).Item(menu_name).Item("menu_state")
'and others
”检查此选项的最后状态
菜单名称=对象结果(“菜单名称”)
响应。写入(菜单名称和“
”)写入正确 如果不是IsEmpty(会话(模型)) 我的状态=会话(模型)(当前级别)(菜单名称)。项(“菜单状态”)在此消失 响应。写入(我的状态(“
”) 如果结束 “我也试过这些 我的状态=会话(模型)(当前级别)(菜单名称)(“菜单状态”) "及 我的状态=会话(模型)(当前级别)。项(菜单名称)。项(“菜单状态”) "等等
我想我只是不知道如何读取我创建的会话变量。有什么想法吗?

使用会话(“模型”)而不是会话(模型)。

使用会话(“模型”)而不是会话(模型)。

请参见:

您必须从会话中提取字典,并将其放入新的变量中

dim state
set state = Session(model)
您还缺少“项目”部分:

my_state = state.item(current_level).item(menu_name).item("menu_state")
见:

您必须从会话中提取字典,并将其放入新的变量中

dim state
set state = Session(model)
您还缺少“项目”部分:

my_state = state.item(current_level).item(menu_name).item("menu_state")

对不起,我应该证明我是从:model=Request.querystring(“model”)得到的,我真的不知道你在这个评论中的意思。对不起,我应该证明我是从:model=Request.querystring(“model”)得到的我真的不知道你在这篇评论中的意思。你知道你使用了一个变量
level
level\u name
?如果后者从未设置为某个值,则查询将失败,并且从未使用任何数据设置objRS2(意外情况下,存在值为“”的IFPDB.level时除外)。假定始终设置level和level_名称,因为它们是数据库表的必需部分。lol!一个小时后,我好不容易才发现你在说什么。变量级别神奇地变成了变量级别的名称。我想这就是为什么要使用显式和Dim'ing所有变量的原因……在没有显式选项的情况下,您永远不应该创建或运行脚本。每次你这么做,都会让一只小兔子伤心。我们不想那样,是吗?尽管如此,我还是喜欢使用链接词典和使用多个括号来调用它们。我怀疑这是否是一个好的模式,但就我个人而言,我喜欢它。您是否知道您使用了变量
level
level\u name
?如果后者从未设置为某个值,则查询将失败,并且从未使用任何数据设置objRS2(意外情况下,存在值为“”的IFPDB.level时除外)。假定始终设置level和level_名称,因为它们是数据库表的必需部分。lol!一个小时后,我好不容易才发现你在说什么。变量级别神奇地变成了变量级别的名称。我想这就是为什么要使用显式和Dim'ing所有变量的原因……在没有显式选项的情况下,您永远不应该创建或运行脚本。每次你这么做,都会让一只小兔子伤心。我们不想那样,是吗?尽管如此,我还是喜欢使用链接词典和使用多个括号来调用它们。我怀疑这是否是一个好的模式,但就个人而言,我喜欢它。谢谢,这可能是一个很大的帮助。我今天要试试。很高兴听到!你能把这篇文章标记为解决方案吗?谢谢,这可能是一个很大的帮助。我今天要试试。很高兴听到!你能把这篇文章标记为解决方案吗?