【问题标题】:SelectMethod in objectDatasource getting called multiple times with multiple datapagerfield使用多个 datapagerfield 多次调用 objectDatasource 中的 SelectMethod
【发布时间】:2010-10-07 19:15:19
【问题描述】:

好的,设置就到这里。我正在构建一个页面,其中包含一个列表视图、一个数据分页器和 3 个数据分页器字段(2 个 NextPreviousPagerField、1 个数字分页器字段)和一个对象数据源,以将所有这些结合在一起。

在我将断点放入 objectdatsource 控件中指定的 SelectMethod 之前,一切正常。似乎对于每个 datapagerfield 控件,它都在调用 selectmethod 和 selectcount 方法。因此,每当用户分页时,它都会调用数据库 6 次而不是 2 次(我没有打开 atm 缓存)。如果我删除一个 datapagerfield,它将删除 2 个调用。

现在这是在 VS2008 中的 asp.net 3.5 SP1 中构建的。当我将相同的代码文件复制到 asp.net 4.0 VS2010 解决方案时,重复调用似乎消失了。

这是 asp.net 3.5 SP1 中的错误吗?

提前致谢

【问题讨论】:

    标签: asp.net listview objectdatasource datapager


    【解决方案1】:

    实际上你应该使用 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 尝试调用 count 方法时取消该事件。

     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

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多