objectDatasource 中的 SelectMethod 被多个 datapagerfield 多次调用

发布于 2024-09-26 05:37:15 字数 472 浏览 3 评论 0原文

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

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

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

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

提前致谢

Ok, so here is the setup. I am building a page that has a listview, a datapager, and 3 datapagerfield (2 x NextPreviousPagerField, 1 x NumericPagerField), and a objectdatasource to tide all of this together.

It was all working fine until I put a breakpoint into the SelectMethod specified in the objectdatsource control. It seems like that for each datapagerfield control, it is calling the selectmethod and selectcount method. Hence, whenever a user paged, it calls the database 6 times instead of 2 (I don't have caching turned on atm). If I remove one datapagerfield, it will remove 2 calls.

Now this is build in asp.net 3.5 SP1 in VS2008. When I copied the same code files to a asp.net 4.0 VS2010 solution, it duplicate call seems to be gone.

Is this a bug in asp.net 3.5 SP1?

Thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

独﹏钓一江月 2024-10-03 05:37:15

实际上您应该使用 OnSelecting 事件。

调用 SelectMethod 方法两次

  1. 发生的情况是,ObjectDataSource在第一次获取数据时
  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

希望这有帮助。

Actually you should be using the OnSelecting event.

What happens is that ObjectDataSource calls the method SelectMethod twice

  1. First time it gets the data.
  2. Next time it gets the count.

So I think you have to implement the OnSelecting event

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

and then cancel the event when the ObjectDataSource tries to call the count method.

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

You can use the link below so that another db call is not made to fetch the count.
http://www.unboxedsolutions.com/sean/archive/2005/12/28/818.aspx

Hope this helps.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文