asp.net Webコントロールを拡張する場合、どのイベントで追加のWebコントロールを挿入する必要がありますか?
-
08-07-2019 - |
質問
既存のコントロールを拡張することにより、複合コントロールを回避したり、ASCXを使用したりしています。ただし、コントロールを継承されたコントロールに追加して、それらのビューステート/ポストバックの整合性を維持することに問題があります。事前レンダリング中にコントロールを追加するたびに、コントロールは表示されますが、ポストバックはビューステート例外をスローします。そことLoadViewStateの両方でそれらを追加しようとしました(もちろん、これはばかばかしいことです)。 Initは、私が拡張しているコントロールからは使用できません。
例外は Sys.WebForms.PageRequestManagerServerErrorException: ビューステートを読み込めませんでした。制御 ビューステートが入っているツリー ロードされたコントロールツリーと一致する必要があります 中にビューステートを保存するために使用された 前のリクエスト。例えば、 コントロールを動的に追加する場合、 ポストバック中に追加されるコントロールは のタイプと位置を一致させる 初期の間に追加されたコントロール リクエスト
解決
実際には、Microsoftは CreateChildControls メソッド。
コントロールを追加する前または後に基本クラスメソッドを呼び出すことができます。そこに規則があるかどうかはわかりません。
protected override void CreateChildControls(){
Controls.Add(someControl);
base.CreateChildControls();
}
役立つことを願っています!
他のヒント
OnInitまたはCreateChildControlsに追加する必要があります。とにかく、ViewStateのトラブルを避けるために、を読んでください。この素晴らしい記事。おそらく、サンプル" 4。プログラムによる子コントロールの初期化"あなたの場合です。