2

WebControl から継承するコントロールの Controls コレクションをオーバーライドして、ユーザーが WebControl にコントロールを追加すると、その前後にボタンを配置して、独自のラッパーに配置できるようにしようとしています。このようなもの:

protected override ControlCollection Controls
{
    EnsureChildControls();
    return this._panel.Controls;
}

ただし、これを行うと、何らかの理由で子コントロールのビューステートが維持されません。何か案は?

ありがとう!

4

1 に答える 1

1

ViewState は、コントロール ツリーと並行して構築されるオブジェクト グラフであるため、これらの種類の変更には、説明している副作用が生じる傾向があります。Controls オブジェクトを本質的にハイジャックして別の意味を与えていると主張することができますが、これは実際にはオーバーライドの意図ではありません。むしろ、オーバーライドは、同じ意味または意図を達成するための異なるメカニズムを提供するためのものです。「私の子供の 1 人の子コントロール」は「私の子供のコントロール」と同じではありません。

あなたが説明していることを達成するためのより良い方法があります。1 つは、ユーザーがコントロールを追加する必要がある「領域」であるコントロールのプロパティを明示的に公開することです。これが、1 つのカスタマイズ可能な領域を持つ複雑なコントロールであることが意図されている場合は、その領域をそのように公開します。

于 2009-04-16T15:58:14.207 に答える