1

asp.net webforms アプリケーションでは、ユーザー コントロールをプレースホルダーに動的に読み込みます。ポストバック全体で変更を保持するために、ページのライフサイクルは通常よりも少し複雑です。ビューステートを正常にロードするために、常に pageInit の以前の制御構造を復元します。その後、プレースホルダーをクリアして、新しいコントロールをロードします。

残念ながら、これは、古いモジュールの .ascx マークアップ ファイル全体のサーバー側処理を含む、古いユーザー コントロールと新しいユーザー コントロールの両方のライフサイクル全体を意味します。

ここで私の質問: 古いモジュールのサーバー側の処理を最小限に抑える可能性はありますか?クライアントに送り返されることはありません (つまり、サーバー側のレンダリングは完全に不要です)。私が理想的に達成したいのは、クライアントに到達することなくvewstate情報を復元することが唯一の目的である場合、ユーザーコントロールの一種の「軽量」ロードです。

この演習の目標は、パフォーマンスの最適化です。

ヒント、アイデア、提案をいただければ幸いです。

4

1 に答える 1

2

コントロールが表示されているかどうかを確認するだけで、動的に追加されたコントロールの Web コントロール ライフサイクル イベントで実行されているコードを解決しました ( http://msdn.microsoft.com/en-us/library/system.web.ui.control.visible.aspx)。 -

protected void Page_Load(object sender, EventArgs e)
{
    if (this.Visible) 
    {
       //Your code here
    }
}

ページのライフサイクル イベントによってトリガーされず、次のようなユーザー アクションによってトリガーする必要があるメソッドがある場合

protected void Button1_Click(object sender, EventArgs e)
{
   //Do something
}

これは安全にそのままにしておくことができます。メソッド コードは、コントロールがページに追加され、アクションがトリガーされるまで実行されません。

可視性チェックは特に洗練されたものではありませんが、動的にロードされたコントロールで自動ワイヤリング イベントを処理するには、おそらくこれが最良の方法です。

于 2013-03-09T23:08:09.750 に答える