asp.net – 如何使用DataPager与服务器端寻呼?
我试图使用DataPager进行服务器端分页.这是我的代码
<asp:DataPager ID="pgrFooBars" PagedControlID="lvFooBars" QueryStringField="page" runat="server" > <Fields> <asp:NumericPagerField /> </Fields> </asp:DataPager> 代码背后 protected void Page_Load(object sender,EventArgs e) { ConfigureBlogPostListView(); } private void ConfigureBlogPostListView() { int pageNum; int.TryParse(Request.Params["page"],out pageNum); int pageSize = 20; PagedList<IFooBar> FooBars = FooService.GetPagedFooBars( new PagingSettings(pageNum,pageSize)); ListViewPagedDataSource ds = new ListViewPagedDataSource(); ds.AllowServerPaging = true; ds.DataSource = FooBars; ds.MaximumRows = pageSize; ds.StartRowIndex = pageNum; //TotalCount is the total number of records in the entire set,not just those loaded. ds.TotalRowCount = FooBars.TotalCount; lvFooBars.DataSource = ds; lvFooBars.DataBind(); pgrFooBars.PageSize = pageSize; pgrFooBars.SetPageProperties(pageNum,FooBars.TotalCount,true); } PagedList来自RobConery的有用的帖子http://blog.wekeroad.com/2007/12/10/aspnet-mvc-pagedlistt/. 问题是DataPager似乎正在使用ListView的Count属性来确定记录的总数,在这种情况下为20.不知怎的,它需要知道有1500个记录,而不是20个记录. DataPager有一个属性TotalRowCount,但这是只读. 我从未看到服务器端分页的DataPager示例,但假设它可以做服务器端分页,否则QueryStringField属性有什么好处? 我知道您可以使用像这样的4GuysFromRolla http://www.4guysfromrolla.com/articles/031506-1.aspx这样的方法来做一个自定义的分页解决方案,但是我首先想知道在创建自定义解决方案之前是否可以使用DataPager解决方案. UPDATE dpFooBars.TotalRowCountComputed = false; dpFooBars.TotalRowCount = AnyNumberThatISoChoose; 我一直在寻找一些破解来完成同样的事情,但是看起来数据库的TotalRowCount是根据它绑定到的数据源中的实际数量来计算的.对我来说似乎很奇怪,Microsoft将同时创建一个ListViewPagedDataSource()类和一个DataPager,而不是一起工作,但这似乎是发生了什么. 更新2(AHA MOMENT?) 解决方法
使用DataPager,服务器端寻呼的唯一方法是在标记中使用LinqDataSource(更新:这不是真的,见下文),并设置ListView的DataSourceID(如
ScottGu’s sample – step 6),而不是通过ListView DataSource属性.然而,我发现有一个
trick使这更可行,所以你可以通过代码隐藏定义你的LinqDataSource查询,而不是在标记(注意,文章说这将适用于任何DataSource控件,但我不认为是这样).
这可能不会对您的情况有任何帮助,因为我注意到,您调用某种服务可能不会(并且不应该)返回一个IQueryable结果,这对于此工作是必需的.无论如何,无论如何,你有兴趣… aspx标记: <asp:ListView ID="lvFooBars" DataSourceID="dsLinq" ....> ...... </asp:ListView> <asp:DataPager ID="pgrFooBars" PagedControlID="lvFooBars" QueryStringField="page" runat="server" > <Fields> <asp:NumericPagerField /> </Fields> </asp:DataPager> <asp:LinqDataSource id="dsLinq" runat="server" OnSelecting="dsLinq_Selecting" /> 后台代码: protected void dsLinq_Selecting(object sender,LinqDataSourceSelectEventArgs e) { //notice this method on FooService requires no paging variables e.Result = FooService.GetIQueryableFooBars(); } 注意,MSDN关于QueryStringField属性的状态:
更新:实际上,您可以使用ObjectDataSource控件(而不是LinqDataSource控件)使用ObjectDataSource控件来工作 – 请参阅this article and download the sample.使用ObjectDataSource并不像使用LinqDataSource控件那么简单,它使用的是较少的魔术linq内容(而是使用堆映射到业务/数据层方法的魔术字符串),并允许IEnumerable暴露您的数据访问方法而不是IQueryable. 尽管如此,我从来没有真正在我的UI标记中嵌入任何类型的DataSource控件(我相信这是必要的)的粉丝,所以我可能会指导DataBager控件,除了您在第一次更新中建议的小应用程序. 约翰,我注意到的另一件事是,你正在试图将标准的Asp.Net服务器控件(依赖于ViewState)与用作Asp.Net Mvc应用程序的辅助类开发的PagedList类结合在一起.虽然这可能有效,但可能会有更简单的路线. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Asp.Net Core中WebSocket绑定的方法详解
- asp.net – 执行sql脚本而不是等待完成
- asp.net核心 – 是否可以自主托管没有IIS(不是Web API)的AS
- asp.net-mvc – 统一MVC和Web Api – 视图和json的相同控制
- asp.net – vs2010 – 用双引号括起String的快捷方式
- asp.net下Cache 缓存操作类代码
- asp.net – Windows 7中Safari 5.x的Windows身份验证问题
- asp.net-mvc – 不一致的可访问性:DbContext中的属性类型
- asp.net-mvc – 为什么在HttpGet操作上的mvc属性路由也会影
- ASP.NET <%=%> vs <%:%>
- 不同的asp.net Web服务和Ihttphandler
- powershell – InvalidOperation:(System.Net.H
- asp.net – 加密ASP .NET 2.0和SQL Server 2005中
- 带有声明性数据的Eval绑定ASP.NET
- asp.net-mvc-routing – 如何检查给定路径是否存
- entity-framework – 在viewbag中传递查询结果
- asp.net-mvc – 无法在asp.net mvc中映射robots.
- asp.net-mvc – 如何在ASP.NET MVC中维护Html.Ch
- ASP.NET身份验证登录和退出浏览器返回按钮
- ASP。net下ispostback的用法