0

女士们先生们下午好——

我的任务是查找和修复一个不熟悉的遗留应用程序中的错误,该应用程序最近对其进行了一些更改,但我没有一种简单的方法(我知道)来测试我的理论。我希望您的集体知识将为我验证测试。

此应用程序将查找列表(绕口令?)DataTable从数据库中延迟加载到 s 中,并将它们作为对象存储在HttpContext.Current.Application(an HttpApplicationState) 中。

在进行更改之前,其中一个查找表以DropDownList下列方式(人为)绑定到 a:

Me._lookupList = TheSession.LookupCache.SomeLookupListName.DefaultView
...
ddl.DataSource = Me._lookupList

其中 'SomeLookupListName' 是一个只读属性,它返回一个DataTablefrom HttpContext.Current.Application。更改添加了一些代码,在绑定到 之前过滤私有Me._lookupList( ) :DataViewDropDownList

Me._lookupList.RowFilter = "SomeTableIDColumn <> " & ... 

如果您还没有猜到,正在发生的事情是,DataView现在已针对应用程序的每个用户进行过滤。我查看了代码,发现大多数其他查找列表都以这种方式复制到本地成员:

Me._lookupList = New DataView(TheSession.LookupCache.SomeLookupListName)

由于我不知道如何伪装成多个用户来攻击我的本地调试会话,因此将代码更改为使用后一种方法实际上与前者有什么不同吗?DataTable.DefaultView过滤实际将过滤器应用于底层的结果是否DataTable与使用 包装表不同New DataView(...)

在绑定之后简单地清除行过滤器是否有意义DropDownList(似乎是一个糟糕的解决方案)?我想坚持这个应用程序使用的丑陋的约定,这样我就不会让其他开发人员感到惊讶,他们会得到类似的任务,否则我会绕过应用程序状态并直接从数据存储库中获取项目.

感谢您的反馈。

4

1 回答 1

1

过滤 DataTable.DefaultView 的结果是否实际上将过滤器应用于底层 DataTable 与使用 New DataView(...) 包装表时不同?

是的。它创建了一个新视图,过滤器应用于该视图。过滤器不直接应用于表。按照模式使用新视图将起作用。

顺便说一句,很容易针对您的调试器测试多个会话。只需打开两个不同的浏览器(IE 和 FF)并指向同一个应用程序。用户登录可能相同,但会话将是唯一的。

于 2010-10-21T00:12:32.883 回答