下午好女士,先生們 -ASP.NET數據視圖 - 用的RowFilter和應用程序緩存的問題
我一直在負責尋找和在最近有給它做了一些改動一個陌生的遺留應用程序修復bug,但我沒有一個簡單的方法(我知道)來檢驗我的理論。我希望你的集體知識能夠爲我驗證測試。
該應用程序懶惰地從數據庫加載查找列表(繞口令?)到DataTable
s,並將它們作爲對象存儲在HttpContext.Current.Application
(HttpApplicationState
)中。
進行了更改之前,查找表中的一個結合於一個DropDownList
以下面的方式(設計的):
Me._lookupList = TheSession.LookupCache.SomeLookupListName.DefaultView
...
ddl.DataSource = Me._lookupList
其中「SomeLookupListName」是返回從DataTable
只讀屬性HttpContext.Current.Application
。這些變化被綁定到之前添加一些代碼,過濾私人Me._lookupList
(DataView
)的DropDownList
:
Me._lookupList.RowFilter = "SomeTableIDColumn <> " & ...
發生了什麼事,如果你還沒有猜到它已經是,這DataView
現在過濾爲每個用戶應用程序。我看了看周圍的代碼,發現大多數其它查找列表複製到本地成員以這種方式:
Me._lookupList = New DataView(TheSession.LookupCache.SomeLookupListName)
因爲我不知道怎麼攻擊我的本地調試會話假裝是多個用戶,將改變實際上使用後一種方法的代碼與前者有什麼不同?過濾DataTable.DefaultView
的結果是否實際上將過濾器應用於底層的DataTable
與使用New DataView(...)
包裝表格的方式不同?
在DropDownList
被綁定之後簡單地清除行篩選器是否有意義(看起來像是一個糟糕的解決方案)?我想堅持這個應用程序使用的醜陋的約定,這樣我就不會驚訝另一個開發人員獲得類似的任務,否則我會繞過應用程序狀態並從數據存儲庫中獲取項目。
我感謝您的反饋。
是的,我錯誤地認爲IE瀏覽器窗口之間共享會話狀態,但我認爲它只是在共享會話的同一窗口內的標籤。我用新代碼推出了一個修補程序修復程序;如果問題消失,我會回來接受你的回答:) – 2010-10-21 00:49:04