【问题标题】:Access a class object instantiated in one code behind page, in different code behind pages in .net访问在一个页面后面的代码中实例化的类对象,在 .net 中的不同页面后面的代码中
【发布时间】:2011-08-11 22:42:43
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    在最后一页,您实例化您的类并通过不同的 cookie 设置其属性。

    【讨论】:

    • 抱歉,我不能使用 javascript,因为我需要支持那些在浏览器上禁用了 javascript 和 cookie 的人。
    • @user648610:我假设您使用的是 ASP.NET(显然不是这种情况,因为需要 javascript?)
    【解决方案2】:

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

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

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

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

    说到底,您可以从该保存表中删除数据,因为它现在应该以其最终状态存储在其他地方。如果您确实走这条路,那么每隔一段时间删除部分完成的数据是个好主意。可以肯定的是,如果有人在三个小时前填写了第 1 页,他们就不会回来完成其余部分。

    【讨论】:

      【解决方案3】:

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

      第 1 页

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

      第 2 页

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

      第n页

      重复

      这还为您提供了允许用户返回并从他们离开的地方取件的选项。附带说明一下,我可能会在用户回答任何问题之前创建记录,这样他们就可以安全地使用返回按钮到第 1 页并更改他们的答案。

      【讨论】:

      • 我不明白你的第一个建议。你能解释一下吗。它们必须是不同的页面,因为我需要显示站点地图路径,因此我无法使用用户控件。
      猜你喜欢
      • 1970-01-01
      • 2011-04-17
      • 2012-03-18
      • 2021-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多