ASP.NET DataView - RowFilter和应用程序缓存的问题

时间:2010-10-20 21:42:53

标签: asp.net session datatable dataview application-cache

下午好女士们和男士们 -

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

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

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

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

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

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

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

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

由于我不知道如何攻击我的本地调试会话冒充多个用户,将改变代码使用后一种方法实际上与前者有什么不同?筛选DataTable.DefaultView的结果是否实际上将过滤器应用于基础DataTable的方式与使用New DataView(...)包装表格的方式不同?

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

感谢您的反馈意见。

1 个答案:

答案 0 :(得分:1)

  

过滤结果   DataTable.DefaultView实际应用   过滤到底层的DataTable   与包裹表格不同   使用新的DataView(...)?

是。它会创建一个应用过滤器的新视图。过滤器不直接应用于表。遵循使用新模式的模式将起作用。

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