SelectMethod в objectDatasource вызывается несколько раз с несколькими полями данных - PullRequest
1 голос
/ 07 октября 2010

Хорошо, так вот настройка.Я создаю страницу, которая имеет вид списка, пейджер данных и 3 поля данных (2 x NextPreviousPagerField, 1 x NumericPagerField) и объектный источник данных, чтобы все это вместе сложить.точка останова в SelectMethod, указанном в элементе управления objectdatsource.Похоже, что для каждого элемента управления поля данных он вызывает метод selectmethod и selectcount.Следовательно, всякий раз, когда пользователь выполняет постраничную загрузку, он вызывает базу данных 6 раз вместо 2 (у меня не включено кэширование atm).Если я удалю одно поле данных, он удалит 2 вызова.

Теперь это сборка в asp.net 3.5 SP1 в VS2008.Когда я скопировал те же файлы кода в решение asp.net 4.0 VS2010, его дублирующий вызов, похоже, исчез.

Это ошибка в asp.net 3.5 SP1?

Заранее спасибо

1 Ответ

5 голосов
/ 03 декабря 2010

На самом деле вы должны использовать событие OnSelecting.

В результате ObjectDataSource вызывает метод SelectMethod дважды

  1. При первом получении данных.
  2. В следующий раз он получит счет.

Так что я думаю, что вам нужно реализовать событие OnSelecting

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

, а затем отменить событие, когда ObjectDataSource пытаетсядля вызова метода подсчета.

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

Вы можете использовать ссылку ниже, чтобы не вызывать другой вызов БД для получения отсчета.http://www.unboxedsolutions.com/sean/archive/2005/12/28/818.aspx

Надеюсь, это поможет.

...