【问题标题】:Where to store common data to share between pages在哪里存储公共数据以在页面之间共享
【发布时间】:2011-03-14 22:43:51
【问题描述】:

我有一个包含 3 个用户控件的页面。我希望在这些用户控件之间共享数据库中的一些数据。实际上我应该把它保存在哪里。我现在正在使用静态类来存储它。我不认为这是一个好主意。
这些数据实际上取决于第一个用户控件。因此,如果用户对第一个用户控件的控件进行了任何更改,那么我将再次从数据库中获取这些数据。

我不确定我应该将这些数据存储在哪里。我应该使用会话还是静态类?

【问题讨论】:

  • 正在共享什么样的数据?它是特定于用户会话的吗?还是应用级元数据?
  • 它是用户特定的。但是如果用户对第一个用户控件进行了一些修改(它有 2 个文本框),我必须再次从数据库中获取数据。大多数情况下,用户只有在编辑完这些文本框后才会回发。在那种情况下,我必须再次从数据库中获取数据。如果我使用会话,我必须重新替换会话值。这就是为什么我不确定是否使用会话。
  • 在用户控件中与此变量交互时更新数据库的一种方法是在属性的设置器中。

标签: c# asp.net caching session


【解决方案1】:

一种方法是将其存储在 Session 变量中,并通过在所有 3 个控件都继承自的基类中定义的属性读取/写入该 Session 变量(或者,如您所说,它们都具有的静态类进入)。

查看this answer 的示例,了解我将如何定义对 Session 变量进行读/写的属性。

【讨论】:

  • 如果我使用静态类,是不是对所有用户都可见?
  • 因此,如果这是一个基于用户会话的变量,最好将其封装在用户控件及其基类中。
【解决方案2】:

如果是想要长时间共享的数据,那么将其保存到数据库中并从相关页面调用它是不错的选择。特别是如果他们可能决定在到达最后一页之前离开/退出,否则会保存它。

如果你只是在页面之间保存,之后就不需要保存了,使用Session肯定是有效的。

【讨论】:

    【解决方案3】:

    这 2 个选项的范围不同。

    当用户在 Web 应用程序中导航 ASP.NET 页面时,会话为用户保留数据。

    静态类为您的 Web 应用程序(任何用户、任何会话)的所有活动保存数据

    【讨论】:

      【解决方案4】:

      ASP.NET 根据您的要求提供不同的状态管理方法。

      静态类是个坏主意,因为所有访问者都会看到相同的数据。

      您可以选择最适合您任务的状态here 获取有关状态的更多信息。

      【讨论】:

        【解决方案5】:

        您的选择是:

        • Viewstate [范围是页面,数据 在回传中幸存]
        • 会话 [范围是 客户端会话,数据仍然存在 跨页]
        • 应用程序状态 [适用于全球范围]
        • 数据库和组合 以上[范围是跨客户端 会话]

        由于已经提到的原因,静态类不是一个好主意。

        Maintain state of an asp.net page

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-03
          • 2018-08-28
          • 1970-01-01
          • 2019-12-20
          • 2011-09-03
          相关资源
          最近更新 更多