0

OK本当にあなたからの別のばかげたQのための時間。

ViewStateで永続化する必要があるいくつかのプロパティを持つコントロールがあります。また、コントロールがページに複数回表示された場合に、プロパティが上書きされないようにする必要があります。

私は次のようなものを書くことを考えました...

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

ただし、ClientIDの値は、ページのライフサイクルの途中で変更されます。「MyControl1」のようなものから始まり、「ctl001_MyControl1」になります。したがって、変更前に適用された値はすべて失われます。

代わりにUniqueIDを使用した場合も同じことが起こります。

私は明らかな何かが欠けていることを知っています、そして私は私が取っている丸薬を非難するつもりですので私はあまり馬鹿に見えません。

-スチュアート

4

3 に答える 3

2

これはユーザーコントロール内で行っているようです。その場合、ビューステートに一意のキーを作成する必要はありません。すべてのコントロールの各インスタンスが独自のビューステートを管理するため、必要なのはコントロールに認識されているキーだけです。そんな感じ:

ViewState[@"somekey"] = ...
于 2011-01-27T13:33:07.503 に答える
1

Page_LoadではなくPage_PreRenderで実行してみてください。

于 2011-01-27T12:44:10.290 に答える
1

コントロール自体の出力名に関連する名前の値を保存しないでください。一意の不変の名前を付けてから、すべてのバインディングルールがクライアント名ではなくその名前に調整されていることを確認してください。

編集:
私が意味することの小さな例として:

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; 
于 2011-01-27T12:44:25.130 に答える