1

よし、これがセットアップだ。listview、datapager、および 3 つの datapagerfield (2 x NextPreviousPagerField、1 x NumericPagerField)、およびこれらすべてをまとめるための objectdatasource を持つページを構築しています。

objectdatsource コントロールで指定された SelectMethod にブレークポイントを設定するまで、すべて正常に機能していました。datapagerfield コントロールごとに、selectmethod と selectcount メソッドを呼び出しているようです。したがって、ユーザーがページングするたびに、データベースを 2 回ではなく 6 回呼び出します (atm でキャッシュを有効にしていません)。datapagerfield を 1 つ削除すると、2 つの呼び出しが削除されます。

現在、これは VS2008 の asp.net 3.5 SP1 でビルドされています。同じコード ファイルを asp.net 4.0 VS2010 ソリューションにコピーすると、重複した呼び出しがなくなったようです。

これは asp.net 3.5 SP1 のバグですか?

前もって感謝します

4

1 に答える 1

5

実際には、OnSelecting イベントを使用する必要があります。

何が起こるかというと、ObjectDataSource がメソッド SelectMethodを 2 回呼び出すことです。

  1. 初めてデータを取得します。
  2. 次回はカウントを取得します。

OnSelecting イベントを実装する必要があると思います

<asp:ObjectDataSource ID="ODS" runat="server" SelectMethod="GetList" SelectCountMethod="GetListCount" 
    OnSelecting="ods_Selecting">
    TypeName="Website.Test" EnablePaging="true" /> 

次に、ObjectDataSource が count メソッドを呼び出そうとしたときにイベントをキャンセルします。

 protected void ods_Selecting(object sender,
                ObjectDataSourceSelectingEventArgs e)
 {
      if (e.ExecutingSelectCount)
      {
           //Cancel the event   
           return;
      }
}

以下のリンクを使用して、カウントをフェッチするために別の db 呼び出しが行われないようにすることができます。 http://www.unboxedsolutions.com/sean/archive/2005/12/28/818.aspx

お役に立てれば。

于 2010-12-03T08:17:21.920 に答える