1

我有一个 OperationHelper 类,如下所示:

public class OperationHelper
    {
        /// <summary>
        /// Gets or sets the Add Operation value
        /// </summary>
        public static bool AddOperation { get; set; }

        /// <summary>
        /// Gets or sets the Edit Operation value
        /// </summary>
        public static bool EditOperation { get; set; }

        /// <summary>
        /// Gets or sets the Delete Operation value
        /// </summary>
        public static bool DeleteOperation { get; set; }

        /// <summary>
        /// Gets or sets the Select Operation value
        /// </summary>
        public static bool SelectOperation { get; set; }
    }

在每次请求时,都会重新分配这些值。当我在本地运行它时,它可以正常工作。但是当我发布代码时,一些值没有被分配或无法正常工作。

所以想用 C# 了解 Asp.Net 中静态变量的行为。

静态变量是否等于所有用户都可以访问的全局变量?如果用户 A 将其设置为 true,则用户 B 可以将该值设为 True,或者它具有不同的变量实例。

4

4 回答 4

3

变量的行为static是,一旦到达它们所属的代码,它们就会被创建。为了解决您的问题,请考虑static constructor为您的班级正确初始化所有值以满足您的需求

public class OperationHelper
{
    /// <summary>
    /// Gets or sets the Add Operation value
    /// </summary>
    public static bool AddOperation { get; set; }

    /// <summary>
    /// Gets or sets the Edit Operation value
    /// </summary>
    public static bool EditOperation { get; set; }

    /// <summary>
    /// Gets or sets the Delete Operation value
    /// </summary>
    public static bool DeleteOperation { get; set; }

    /// <summary>
    /// Gets or sets the Select Operation value
    /// </summary>
    public static bool SelectOperation { get; set; }

    static OperationHelper() {
    //initialize your static variables here
    }
}

有关构造函数的参考,请参见此处。static

于 2013-04-13T09:34:44.460 回答
2

所以想用 C# 了解 Asp.Net 中静态变量的行为。

静态变量是否等于所有用户都可以访问的全局变量?如果用户 A 将其设置为 true,则用户 B 可以将该值设为 True,或者它具有不同的变量实例。

只有当您在池中的一个工作进程下运行您的站点时,才会出现这种行为。

如果您的池有多个工作进程,则每个进程都有其静态值,并且您不知道每个请求和每个用户分配了哪个进程。并且一起处理它们是不通信的。

因此,假设您有一个包含 4 个工作进程的池。

UserA请求页面,进程1为replay,给A设置一个静态值
。UserB请求页面,进程1为replay,静态值为
A。UserA请求页面,进程2为replay,静态值为A。没有设置。

等等。有关该主题的更多信息: ASP.NET 静态变量的生命周期 静态变量
在哪里存储在 asp.net aspx 页面中
在 ASP.NET 中使用静态变量而不是应用程序状态
ASP.NET 网站上的静态方法
Asp.net 静态对象有时会显示为非全球性

于 2013-04-13T10:03:11.697 回答
1

静态变量只创建一次。所以userB会得到相同的变量实例来回答你的问题。

更多关于这方面的讨论在这里

于 2013-04-13T09:37:34.693 回答
0

您需要考虑会话,该会话将为访问该站点的每个用户提供不同的价值

于 2013-04-13T10:17:33.170 回答