更新的变量不会保持更新的值

时间:2015-06-20 18:54:12

标签: c# asp.net

我有一个名为topic的词典,我初始化然后将变量分配到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”,这告诉我在函数结束后不会保持更新。

如何更新此更新?

2 个答案:

答案 0 :(得分:1)

看起来您在每个页面加载上重新初始化“主题词典”。如果在初始化它的代码周围添加!IsPostBack,则每次都不会重新初始化。但是,我不能确定这是处理这个问题的最佳方式,而不了解您要完成的任务。也许最好在决定是否将topics初始化时检查if ((topics == null)) { topics = new Dictionary<string, bool> { {"Books", false}, {"Bikes", false}, {"Binders", false}, }; } 是否为空:

<input type='text' />

答案 1 :(得分:1)

根据您所解释的内容和我所看到的内容,您尝试在不使用任何持久性机制的情况下跨页面请求保留数据,因此在每个页面请求上会发生的事情是“主题词典”。重新初始化,这就是你失去价值的原因。虽然我不确定它是如何在asp.net中完成的,但你应该做的是要么使用缓存,数据库来保存字典,要么在asp.net的情况下正确使用viewstate,这样该值将在多个请求中存活