2010-07-29 102 views
2

因此,我创建了一个.Net网站,其中一部分是可以过滤,查询和显示数据库表的页面。然后,我允许用户选择单个行进行编辑或删除。这两个功能都是在他们自己的单独页面上执行的。最近我被要求将功能添加到第一页,以允许在访问之间保留查询过滤。例如,如果用户编辑了一行然后返回到表格,则他们选择的过滤器应该仍然存在。在页面内显示.Net页面

我的问题是最简单的方法是什么。问题是许多筛选器是基于DB中的另一个表动态生成的,因此它们不会静态编码到页面中。一种选择是将查询字符串中的过滤器字符串传递给查询字符串,但由于可能的长度可能很长,这看起来不切实际。我也考虑过打开一个新窗口,但是担心安全和数据重复。我也可以使用iframe来加载页面并隐藏原始内容,直到完成编辑,但我不确定如何从周围页面的iframe中访问点击,或者如果这是一个好主意。

任何帮助/建议将不胜感激。

谢谢!

+0

您可以使用会话来存储他们最近的过滤器。 – Fosco 2010-07-29 13:41:32

回答

0

你可以使用一个SESSION变量来存储类似Dictionary<string, object>或东西,其包含的键识别各表和值表示该过滤器。实际的过滤选项不应该为给定会话存储太多信息。

不知道您的应用程序如何捕捉过滤器的概念,但提供完全合格的解决方案有点困难,但会话似乎是一个不错的选择。

+0

那么在页面上过滤器是一个下拉列表,但它基本上是写出将出现在WHERE子句中的SQL的一种方式。每个过滤器的id是SQL列的id,ListItems的值是可能的列值。他们都是字符串或整数。 如果我按照你所说的在每个表格页面的会话中存储一个Dictionary 对象,这会很昂贵吗?我真的没有看到给定的用户访问超过一个或两个独特的表格页面,除非他们是管理员,因为每个用户只会关心他们自己的组 – rpf3 2010-07-29 15:57:56

+0

这对我来说似乎是可行的。在会话中存储这种数据的内存成本应该不高。这实际上取决于你想如何序列化过滤器值。也许如果你定义了一个封装了不同过滤选项的“TableFilter”类,你可以序列化一个Dictionary 。 – 2010-07-29 23:36:25

3

您可以将您的功能封装为两个页面均可使用的User Control

How to: Convert Web Forms Pages into ASP.NET User Controls

+0

+1。这个问题听起来不像是另一个页面的情况,而只是来自另一个页面的控件+逻辑的封装。 – 2010-07-29 13:53:06

+0

当你说创建用户控件时,你指的是什么功能?查询过滤只在原始页面上完成。 – rpf3 2010-07-29 14:07:42

+0

我的意思是说有一个页面可以执行查询过滤,并将其他页面逻辑作为用户控件进行包含。 – 2010-07-29 14:27:51

0

您可以将过滤器保存在用户端的cookie中。不是一个完美的解决方案,但它是一种方式。