0

を維持したい場合は Page_Init の後に動的コントロールを追加するべきではないため、ばかげたタイトルのように思えるかもしれViewStateませんが、問題を説明するより良い方法は思いつきませんでした。

次のようなクラスがあります。

public class WebCustomForm : WebControl, IScriptControl
{
    internal CustomRender Content
    {
        get
        {
            object content = this.Page.Session[this.SESSION_CONTENT_TRACKER];
            return content as CustomRender;
        }
        private set
        {
            this.Page.Session[this.SESSION_CONTENT_TRACKER] = value;
        }
    }
}

CustomRenderは、執筆中の CustomForms モジュールを自己完結させるために使用する ITemplate を実装する抽象クラスです。

を保持するPage_InitページでWebCustomForm、関連する ID を渡してコントロールを初期化します。次に、オーバーライドされたOnInitメソッドで、現在アクティブなコントロールでWebCustomFormInstantiate を呼び出します。CustomRender

if (this.Content != null)
{
     this.Content.InstantiateIn(this);
}

問題は、私のコントロールが のコントロールCustomRenderを変更する機能を必要とすることです。しかし、CustomRender で発生するイベントが発生すると、明らかに Page_Init イベントは既に発生しています。それで、私の質問は、その中に動的に追加されたコントロールからコンテンツを変更するにはどうすればよいですか?CustomRenderWebCustomFormWebCustomForm

私の見方では、次の 3 つのオプションがあります。

  1. CustomRenderコントロールを独自のスタンドアロン コントロールに分離し、基本的にコントロールごとに aspx ページを持ち、ページ上でイベントを自分で処理します (ただし、ページにドロップして忘れるコントロールを作成することを望んでいました)。
  2. イベントを使用せず、現在のページをリクエストし続けますが、異なるリクエスト パラメータを使用します
  3. 誰かが私に与えることができるより良い提案で、私は製図板に戻ります.
4

2 に答える 2

0

オプション1を選択しました。全体的なコントロールを廃止し、別のページに配置する必要のある個別のコントロールを作成しました。Postback URLを取得するためのプロパティを追加し、コントロール間でIDを渡すためのSessionプロパティを作成したので、RequestParamsに依存する必要はありません。

于 2010-05-18T09:02:00.323 に答える
0

InitComplete イベントで実行してみませんか。これは、ページが初期化された後ですが、状態が読み込まれる前です。

于 2010-05-17T20:43:42.260 に答える