2

私が理解しているように、UpdatePanel が更新されると、ページ全体が再構築されますが、UpdatePanel 内のコンテンツのみが実際にページに再ロードされます。

ページの一部のレンダリングが非常に遅く (データベース呼び出しが原因) 、ページのごく一部のみをリロードする必要がある場合は、ポストバックごとにこれらすべてをリロードしたくありません。

例 - ページの上部 (UpdatePanel の外側) に一連の合計を表示し、UpdatePanel の内側に「次のページ」ボタンを含むグリッドを表示します。[次へ] をクリックすると、グリッドが更新されますが、サーバーがすべての合計についてデータベースに再度クエリを実行することは望ましくありません。

これを行う最善の方法は何ですか?

4

3 に答える 3

1

ポストバックが更新パネルからのものかどうかを確認できます。その場合は、合計を計算しません。

複数の updatepanel がある場合は、これを確認することで、どの updatepanel がポストバックしたかを確認できます。

bool isUpdatePanelPostBack 
        = ScriptManager.GetCurrent(Page).AsyncPostBackSourceElementID
          .Equals(yourUpdatePanel.UniqueID);

if(!isUpdatePanelPostBack) {
    //calculate your totals 
}

ページに updatepanel が 1 つしかない場合は、IsInAsyncPostback をチェックして bool を設定できます。

bool isUpdatePanelPostback = ScriptManager.GetCurrent(Page).IsInAsyncPostBack;
于 2012-05-31T12:01:53.050 に答える
0

標準的なアプローチは、合計ロジックを実行する前に!PostBackチェックを行うことです。このように、ページが最初に読み込まれたときにのみ計算され、その後は、表示に使用しているコントロールのViewStateに保持されます。

または、(ObjectDataSourceで)データバインディングを使用する場合、データバインディングはページが最初に読み込まれたときにのみ発生するため、これは自動的に処理されます。

于 2012-05-28T08:42:14.537 に答える
0

ページのIsAsyncプロパティをいつでもチェックして、コード ブロックを実行から除外できます。

于 2012-05-28T01:19:36.673 に答える