2012-04-02 43 views
1

我試圖在Session變量中存儲表項列表以跟蹤項目複選框的最後一個狀態(CHECKED或UNCHECKED)。VBScript:通過字典中的會話變量讀取

我首先通過將所有值設置爲UNCHECKED,第一次用戶加載頁面。在這部分代碼似乎工作:

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:_‘[未定義]’」

我已經試過

' 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 

我想我只是不知道如何閱讀會話我做的變量。有任何想法嗎?

+0

您是否知道您使用一個變量'level'和'level_name'?如果後者從未設置爲某個值,則查詢將失敗,並且objRS2從不會設置任何數據(除非發生意外,並且存在值爲''的IFPDB.level)。 – AutomatedChaos 2012-04-03 06:58:07

+0

level和level_name被假定爲始終設置,因爲它們是數據庫表的必需部分。 – 2012-04-03 13:16:44

+0

哈哈!一小時之後,我發現你正在談論困難的方式。變量級神奇地變成了變量level_name。我想這是使用明確和Dim'ing所有變量的情況下... – 2012-04-03 16:46:53

回答

0

使用會話(「模型」)而不是會話(模型)。

+0

對不起,我應該已經證明我是從:model = Request.querystring(「model」) – 2012-04-03 01:05:51

+0

我真的不知道你在這個評論中的含義。 – 2012-04-03 05:21:49

+0

模型是一個變量。 – 2012-04-03 16:47:35

1

參見: Can I store a Scripting Dictionary in a session variable?

你必須提取會話字典,投放到一個新的變量。

dim state 
set state = Session(model) 

您還缺少 '項目' 的一部分:

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

謝謝,這可能是一個很大的幫助。今天我會嘗試一下。 – 2012-04-03 13:17:21

+1

是的!完美工作! – 2012-04-03 16:57:14

+0

好聽!你可以將這篇文章標記爲解決方案嗎? – 2012-04-04 10:13:21