好的时间是您真正的愚蠢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; 
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top