我有一个名为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”,这告诉我在函数结束后不会保持更新。
如何更新此更新?
答案 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,这样该值将在多个请求中存活