更新的变量不会维护其更新的值

本文关键字:更新 维护 变量 | 更新日期: 2023-09-27 17:57:32

我有一个名为 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},
        };
    }
 //...
}

然后,单击按钮时,我尝试反转其中一个字典项目,并在警报中显示其值。

 protected void Button4_Click(object sender, EventArgs e)
    {
        topics["Books"] = !topics["Books"];
        ScriptManager.RegisterClientScriptBlock(this, typeof(Page),    
        "alert", "alert('" + topics["Books"] + "');" + slider, true);
    {
警报"true">

告诉我函数中的值已更改,但是,当我再次单击时,我再次得到"true",这告诉我函数结束后不会维护更新。

如何使此更新持续下去?

更新的变量不会维护其更新的值

看起来您在每次页面加载时重新初始化主题词典。如果在初始化它的代码周围放置一个!IsPostBack,它不会每次都重新初始化。但是,我不确定这是处理此问题的最佳方法,而无需更多地了解您要完成的任务。也许在决定是否像这样初始化它时检查topics是否为空会更好:

if ((topics == null)) {
    topics = new Dictionary<string, bool>
    {
        {"Books", false},
        {"Bikes", false},
        {"Binders", false},
    };
}

根据您所解释的内容和我所看到的,您正在尝试跨页面请求持久化数据,而无需使用任何持久性机制,因此发生的情况是在每个页面请求上,"主题字典"被重新初始化,这就是您失去值的原因。虽然我不确定它是如何在 asp.net 中完成的,但您应该做的是使用缓存、数据库来持久化字典,或者在 asp.net 的情况下使用 viewstate 是否正确,以便该值将在多个请求中幸存下来。