1

CreateChildControls を実装する複合サーバー コントロールがあります。このコントロールはグリッドであり、ページングと並べ替えのコントロールも含まれています。

並べ替えリンクがクリックされると、最初に CreateChildControls が呼び出され、次にイベント ハンドラーが呼び出され、イベント ハンドラーから CreateChildControls を再度呼び出して、新しい並べ替え順序でコントロールを再構築します。

ポストバックがコントロール イベント ハンドラーによってトリガーされたときに CreateChildControls をスキップする方法はありますか?

これは可能ですか、それともイベント ハンドラーの前に CreateChildControls を通過する必要があるので、asp.net はイベントを既存のコントロールにフックできますか?

4

2 に答える 2

3

この質問を書いた時点では知りませんでしたが、これは実際にはカスタム コントロールの自然なライフ サイクルの一部です。

CreateChildControls()が呼び出されるたびEnsureChildControls()に呼び出されます。トリックは、 へChildControlsCreatedの最初の呼び出しの最後にプロパティを設定するCreateChildControls()ことです。これにより、プロセス全体が複数回発生することはありません。

于 2012-12-28T12:00:33.167 に答える
0

私も同様の状況ですが、次の 2 つのことが進行中です。コントロールをロードしていて、ユーザーが以前に選択した内容に基づいて情報を表示しています。ユーザーがドロップダウン リストを変更するか、ボタンをクリックすると、ページが再読み込みされ、選択内容がクエリ文字列に追加されます。だから、私の解決策はこれです:

protected override void CreateChildControls()
{
    base.CreateChildControls();
    AddControls();
    if (Page.IsPostBack)
        return;
    ShowProcedure() // The time-intensive code that I don't want to call twice.
}

AddControls はコントロールを設定し、ポストバック オプションを有効にします。ShowProcedure は、クエリ文字列の値を使用して多くのデータを表示します。このように、CURRENT 値に対して ShowProcedure を呼び出していません。

于 2016-09-09T12:36:23.730 に答える