在asp.net页面中的静态变量问题如何解决?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (55)

我对Asp.net页面中使用静态变量有一个疑问。

我有一个页面说UserDetails.aspx。在这个页面中,我有一个静态变量来存储一些特定于用户的数据。那么,这个变量会被多个用户共享还是会为每个用户创建一个单独的变量?

  public partial class UserDetails : System.Web.UI.Page
    {
       static int numberOfReviews=0;
       protected void Page_Load(object sender, EventArgs e)
         {
            numberOfReviews= GetReviews();
         }
    }

在这里,numberOfReviews会特定于每个用户还是共享?

numberOfReviews

提问于
用户回答回答于

静态变量范围是应用程序范围。numberOfReviews将在所有用户中共享。你需要使用Session存储每个用户,所以它是在所有页面访问。另一方面,如果你只是需要它在一个特定的页面上,你可以保存它,ViewState并可以在回发

用户回答回答于

应用程序范围:具有应用程序范围的变量在整个应用程序中可用,即跨所有页面的应用程序的所有用户。

会话范围:当许多用户连接到站点时,它们中的每一个都将有一个单独的会话(与应用程序识别的用户身份相关联)。当变量具有会话范围时,每个会话都会有新实例,即使用户正在访问相同的页面。会话变量实例在该会话的所有页面上都可用。

页面范围:页面上有一个实例变量时,它只针对该页面,仅针对该会话。

静态变量Application scope。应用程序的所有用户将在案例中共享相同的变量实例。

请注意,虽然静态变量在应用程序域中有一个实例。因此,如果应用程序部署在负载平衡的Web场中,则每个应用程序域将具有一个单独的变量实例。这可能会给你不正确的结果。

基于此,你应该决定你的变量应该在什么范围内。使用静态变量的IMO是一种代码味道,应该不鼓励。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励