【问题标题】:ASP.NET DataView - problem with RowFilter and application cacheASP.NET DataView - RowFilter 和应用程序缓存问题
【发布时间】: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


    【解决方案1】:

    是否过滤结果 DataTable.DefaultView 实际适用 基础数据表的过滤器 与包裹桌子不同 使用新的 DataView(...)?

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

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

    【讨论】:

    • 是的,我错误地认为 IE 在浏览器窗口之间共享会话状态,但我认为共享会话的只是同一窗口中的选项卡。我用新代码推出了一个中断修复;如果问题消失,我会回来接受你的回答:)
    猜你喜欢
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    相关资源
    最近更新 更多