3

既存のコントロールを拡張することにより、複合コントロールを回避するか、ASCX を使用しようとしています。ただし、継承されたコントロールにコントロールを追加して、ビューステート/ポストバックの整合性を維持することに問題があります。プリレンダリング中にコントロールを追加するたびに、コントロールが表示されますが、ポストバックでビューステート例外がスローされます。そこと LoadViewState の間にそれらを追加しようとしました(もちろん、これは大げさなばかげたものでした)。私が拡張しているコントロールから初期化は利用できません。

例外は Sys.WebForms.PageRequestManagerServerErrorException: ビューステートの読み込みに失敗しました。ビューステートが読み込まれるコントロール ツリーは、前の要求でビューステートを保存するために使用されたコントロール ツリーと一致する必要があります。たとえば、コントロールを動的に追加する場合、ポストバック中に追加されたコントロールは、最初のリクエスト中に追加されたコントロールのタイプと位置と一致する必要があります

4

2 に答える 2

4

実際、マイクロソフトは、 CreateChildControlsメソッドをオーバーライドする必要があると言っています。

コントロールを追加する前または後に基本クラスのメソッドを呼び出すことができますが、そこに規則があるかどうかはわかりません。

protected override void CreateChildControls(){
  Controls.Add(someControl);
  base.CreateChildControls();
}

それが役立つことを願っています!

于 2008-11-17T19:40:26.913 に答える
3

それらを OnInit または CreateChildControls に追加する必要があります。とにかく、ViewState で問題が発生しないようにするには、この素晴らしい記事をお読みください。おそらく、サンプル「4.プログラムによる子コントロールの初期化」があなたのケースです。

于 2008-11-17T19:40:07.583 に答える