C# 更新的变量不';t维护它';s更新值

C# 更新的变量不';t维护它';s更新值,c#,asp.net,C#,Asp.net,我有一个名为topics的字典,我对它进行初始化,然后在Page_Load中分配变量,就像这样 public partial class index : System.Web.UI.Page { public static Dictionary<string, bool> topics { get; set; } protected void Page_Load(object sender, EventArgs e) { topics = n

我有一个名为topics的字典,我对它进行初始化,然后在Page_Load中分配变量,就像这样

public partial class index : System.Web.UI.Page
{
    public static Dictionary<string, bool> topics { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
        topics = new Dictionary<string, bool>
        {
            {"Books", false},
            {"Bikes", false},
            {"Binders", false},
        };
    }

 //...

}
警报“true”告诉我函数中的值已更改,但是,当我再次单击时,我再次得到“true”,这告诉我函数结束后更新不会保持


如何使此更新保持不变

看起来您在每个页面加载时都在初始化主题词典。如果你放一个
!IsPostBack
围绕初始化它的代码,它不会每次都重新初始化。然而,我不能肯定这是最好的方式来处理这一点,而不知道你正在努力实现更多。在决定是否这样初始化时,最好检查
主题
是否为空:

if ((topics == null)) {
    topics = new Dictionary<string, bool>
    {
        {"Books", false},
        {"Bikes", false},
        {"Binders", false},
    };
}
if((主题==null)){
主题=新词典
{
{“书”,假},
{“Bikes”,false},
{“Binders”,false},
};
}

根据您的解释和我所看到的,您试图在不使用任何持久化机制的情况下跨页面请求持久化数据,因此,在每个页面请求上,“主题词典”都会被重新初始化,这就是您失去价值的原因。虽然我不确定在asp.net中是如何实现的,但您应该做的是使用缓存、数据库或在asp.net中使用viewstate(如果正确)来持久化字典,以便该值能够经受多次请求。

我最初的回答是检查字典是否为空,但我应该检查主题。谢谢!这两种方法都适用于我,尽管您是否打算设置上述条件(topics==null)?有没有快速的方法来解释这些方法之间的区别?我的目标是在用户每次访问网页时初始化字典,然后允许用户在单击事件时更改变量。您是正确的。我把答案改为==而不是!=。Not IsPostback正在检查当前页面加载是否为回发。检查它是否为null基本上就是查看它是否已经被创建。我将测试这两种方法,以防出现您确实希望在回发时对其进行初始化的场景。我猜您可能只想检查它是否已初始化。
if ((topics == null)) {
    topics = new Dictionary<string, bool>
    {
        {"Books", false},
        {"Bikes", false},
        {"Binders", false},
    };
}