访问在页面后面的一个代码中实例化的类对象,在.net中的页面后面的不同代码中

时间:2011-08-10 20:11:47

标签: .net sql-server class object code-behind

我正在构建一个包含多个页面的应用程序。第一个aspx页面有用户选择选项,主要是单选按钮和下拉菜单。第二页有另一类用户选择选项,依此类推至第4页。在用户单击第4个aspx页面上的提交按钮的那个时间点,所有选择都应该存储在sql表中。

我有一个类(非静态),其属性用于存储所有用户选择。我的问题是如何访问在page1后面的代码中实例化的类对象,在其他页面的代码中,以便我可以将所有选择存储在该对象的属性中,并在第4页的SQL中存储这些属性的值。 我无法使用会话,因为将有100个用户并可能导致我的应用程序崩溃。此外,我想在SQL中一次存储所有选择,以减少多个SQL调用。

3 个答案:

答案 0 :(得分:0)

为什么不直接用第一页创建记录并将记录更新到每个其他页面,将记录ID存储在会话中?

第1页

使用page1中的问题将记录插入数据库,将其他记录插入null。检索插入记录的记录ID并将其存储在会话中。

第2页

使用第2页的问题使用会话中的ID

更新数据库中的记录

Page n

重复

这也让您可以选择允许用户返回并从中断的地方继续。作为旁注,我可能会在用户回答任何问题之前创建记录,这样他们就可以安全地使用后退按钮进行第1页并更改答案。

答案 1 :(得分:0)

由于您不想使用会话,您可能希望将每个页面的选择存储在cookie中。这可以在客户端完成(使用javascript)。

在最后一页上,您实例化您的类并从不同的Cookie中设置其属性。

答案 2 :(得分:0)

ASP.NET支持跨页回发,允许您将第1页发布回第2页,并从第2页后面代码中的第一页访问控件。您可以在此处找到有关MSDN的更多信息:http://msdn.microsoft.com/en-us/library/ms178139.aspx。它需要一些黑客才能让它在四页上工作,它不会非常漂亮,但应该是可能的。

我知道你想减少SQL调用,但我个人可能会考虑在我的数据库中添加某种保存表,并在用户浏览表单的四个页面时将数据添加到该表中。

例如,第一页有一个叫做名字的字段,第二页有一个叫做姓氏的字段,第三页有一个叫做出生日期的字段。我将创建一个数据库表,其中包含ID,名字,姓氏和出生日期列。当用户完成第一页时,我会在该表中创建一行并将第一个名称保存到其中。您如何管理数据库中的ID取决于您,但我会使用ASP.NET配置文件提供程序获取ID并将其保存在会话状态或匿名用户配置文件中。

当用户完成第二页后,我会从会话中或者我存储它的任何地方获取ID,并在数据库中对该行执行更新,保存第二个名称,依此类推。当它到达最后阶段时,您可以将目前为止保存的所有内容从数据库中拉回来,并通过您需要的任何业务逻辑运行它。

在完成所有操作后,您可以从该保留表中删除数据,因为它现在应该存储在其最终状态的其他位置。如果您沿着这条路前进,最好每隔一段时间删除部分完成的数据。这可能是一个安全的赌注,如果有人在三小时前填写第1页,他们就不会回来完成剩下的工作。