持有控件的属性

时间:2011-01-27 12:41:44

标签: c# asp.net viewstate object-persistence

确定你的另一个愚蠢的Q的时间真的。

我有一个控件,它有一些需要在ViewState中保存的属性。如果控件在页面上出现多次,我还需要确保不会覆盖属性。

我想写点像......

ViewState[String.Format("{0}_{1}", "BaseKey", this.ClientID)] = ...

但ClientID的价值在页面的生命周期中途发生变化。它从“MyControl1”开始,然后变成“ctl001_MyControl1”。因此,在更改之前应用的任何值都将丢失。

如果我使用UniqueID,也会发生同样的事情。

我知道我错过了一些明显的东西,而且我会责怪我正在服用的药片,所以我看起来哑。

- 斯图尔特

3 个答案:

答案 0 :(得分:2)

看起来你在用户控件中这样做了,如果这是真的你不需要为viewstate创建一个唯一的键,每个控件的每个实例都管理它自己的viewstate所以你需要的只是一个已知的密钥你的控制,类似的东西:

ViewState[@"somekey"] = ...

答案 1 :(得分:1)

尝试在Page_PreRender上而不是Page_Load吗?

答案 2 :(得分:1)

不要将名为relative的值存储在控件本身的输出名称中。为它提供一个唯一的,不变的名称,然后确保所有绑定规则都适应该名称而不是客户名称。

修改
作为我的意思的一个小例子:

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;