-
25-10-2019 - |
题
好的时间是您真正的愚蠢Q。
我的控件具有一些需要在ViewState中持续存在的属性。我还需要确保如果控件出现在页面上不止一次,则不会覆盖属性。
我想写的东西...
ViewState[String.Format("{0}_{1}", "BaseKey", this.ClientID)] = ...
但是客户端的价值通过页面的生命周期变化了。它以“ mycontrol1”之类的东西开始,然后变成“ ctl001_mycontrol1”。因此,在更改之前应用的任何值都丢失。
如果我使用solutiondID,也会发生同样的事情。
我知道我缺少一些明显的东西,我会怪我要服用的药,所以我不看 也 哑的。
- 斯图尔特
解决方案
看来您在用户控件内部执行此操作,如果这是正确的,则无需为ViewState制作唯一的键,每个控件的每个实例都会管理其自己的ViewState,因此您所需要的只是您控制所知的钥匙,这样的东西:
ViewState[@"somekey"] = ...
其他提示
尝试在page_prerender而不是page_load上进行操作?
不要存储相对于控件本身的输出名称命名的值。为其提供一个独特的,不变的名称,然后确保所有绑定规则都适应该名称而不是客户名称。
编辑:
作为我的意思的一个小例子:
MyControl ctrl1 = new MyControl();
ctrl1.ID = "MyControlA";
ctrl1.Text = "Some text";
ViewState[ctrl1.ID] = ctrl1.Text;
MyControl ctrl2 = new MyControl();
ctrl2.ID = "MyControlB";
ctrl2.Text = "Some other text";
ViewState[ctrl2.ID] = ctrl2.Text;
不隶属于 StackOverflow