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

访问在.net的不同代码隐藏页中的一个代码隐藏页中实例化的类对象,.net,sql-server,class,object,code-behind,.net,Sql Server,Class,Object,Code Behind,我正在构建一个有多个页面的应用程序。第一个aspx页面具有用户选择选项,这些选项主要是单选按钮和下拉菜单。第二页有另一类用户选择选项,依此类推到第四页。当用户单击第4个aspx页面上的submit按钮时,所有选择都应存储在sql表中 我有一个带有属性的类(非静态)来存储所有用户选择。我的问题是如何访问类对象,该类对象在第1页的代码隐藏中实例化,在其他页的代码隐藏中实例化,以便我可以将所有选择存储在该对象的属性中,并将这些属性的值存储在第4页的SQL中。 我无法使用会话,因为将有100个用户,可能

我正在构建一个有多个页面的应用程序。第一个aspx页面具有用户选择选项,这些选项主要是单选按钮和下拉菜单。第二页有另一类用户选择选项,依此类推到第四页。当用户单击第4个aspx页面上的submit按钮时,所有选择都应存储在sql表中

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

为什么不用第一页创建记录,并用另一页更新记录,将记录id存储在会话中

第1页

在数据库中插入记录,其中包含第1页的问题,其他问题为空。检索插入记录的记录id并将其存储在会话中

第2页

使用会话中的id,使用第2页中的问题更新数据库中的记录

第n页

重复


这还提供了一个选项,允许用户返回并拾取他们离开的位置。作为旁注,我可能会在用户回答任何问题之前创建记录,这样他们就可以安全地使用返回按钮到第1页并更改答案。

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


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

ASP.NET确实支持跨页回发,允许您将第1页回发到第2页,并从第二页代码隐藏的第一页访问控件。您可以在此处找到有关MSDN的更多信息:。这将需要一点黑客左右,使其工作超过四页,它不会非常漂亮,但它应该是可能的

我知道您希望减少SQL调用,但就我个人而言,我可能会考虑在数据库中添加某种保留表,并在用户浏览表单的四个页面时将数据添加到该表中

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

当用户完成第二页时,我会从会话或我存储它的任何位置抓取ID,并在数据库中的该行上进行更新,保存第二个名称,依此类推。当它进入最后阶段时,您可以将保存的所有内容从数据库中拉回来,并通过需要的任何业务逻辑运行它


说到底,您可以从该保留表中删除数据,因为它现在应该以最终状态存储在其他位置。如果您确实走这条路,那么每隔一段时间删除部分完成的数据是一个好主意。如果有人在三小时前填写了第1页,他们可能不会回来完成其余的工作。很抱歉,我不能使用javascript,因为我需要支持浏览器上禁用javascript和Cookie的用户。@user648610:我假设您使用的是ASP.NET(显然不是这样,因为需要javascript?)我不明白你最初的建议。你能解释一下吗。它们必须是不同的页面,因为我需要显示sitemappath,因此无法使用用户控件。