【发布时间】:2011-04-28 07:25:45
【问题描述】:
女士们,先生们,下午好 --
我的任务是查找和修复一个不熟悉的遗留应用程序中的一个错误,该应用程序最近对其进行了一些更改,但我没有一个简单的方法(据我所知)来测试我的理论。我希望您的集体知识能为我验证测试。
此应用程序将查找列表(绕口令?)从数据库中延迟加载到 DataTables 中,并将它们作为对象存储在 HttpContext.Current.Application(HttpApplicationState)中。
在进行更改之前,其中一个查找表以下列方式(人为)绑定到 DropDownList:
Me._lookupList = TheSession.LookupCache.SomeLookupListName.DefaultView
...
ddl.DataSource = Me._lookupList
其中“SomeLookupListName”是一个只读属性,它从HttpContext.Current.Application 返回一个DataTable。更改添加了一些代码,在绑定到 DropDownList 之前过滤私有 Me._lookupList (DataView):
Me._lookupList.RowFilter = "SomeTableIDColumn <> " & ...
发生了什么,如果您还没有猜到的话,DataView 现在已针对应用程序的每个用户进行过滤。我查看了代码,发现大多数其他查找列表都以这种方式复制到本地成员:
Me._lookupList = New DataView(TheSession.LookupCache.SomeLookupListName)
由于我不知道如何伪装成多个用户来攻击我的本地调试会话,因此将代码更改为使用后一种方法实际上与前者有什么不同吗?过滤DataTable.DefaultView 的结果是否实际上将过滤器应用于底层DataTable 与使用New DataView(...) 包装表格时不同?
在绑定DropDownList 之后简单地清除行过滤器是否有意义(似乎是一个糟糕的解决方案)?我想坚持这个应用程序使用的丑陋的约定,这样我就不会让其他开发人员感到惊讶,他们会得到类似的任务,否则我会绕过应用程序状态并直接从数据存储库中获取项目.
感谢您的反馈。
【问题讨论】:
标签: asp.net session datatable dataview application-cache