ASP DataPager返回不正确的StartRowIndex

本文关键字:StartRowIndex 不正确 返回 DataPager ASP | 更新日期: 2023-09-27 18:09:27

我有一个ListView与DataPager。ListView在后台代码中绑定到一个DataTable。

假设我将Pager设置为显示10个页面链接,并且我有超过10个页面的数据。这11个按钮(10页加上指向第11页的溢出省略号)工作得很好。Next和Previous链接也可以正常工作。

页的第一页

然而,一旦我点击省略号并转到第11页,链接仍然指向页面的第一页的偏移量。也就是说,点击第12页会把我扔到第3页(第1页是新的第10页省略号,第2页是第11页)。与Next和Previous链接以及所有其他数字链接相同。

页的第二页

查看浏览器控制台中的代码,看起来甚至(其他人的)正在工作的寻呼机在链接的__doPostBack调用中为页面的每个页面打印相同的参数。因此,我不确定Pager是如何保持其总体偏移量的,因为页面的每个页面只是相对于它们自己给出偏移量。

除了将我的ListView绑定到代码后面的数据表而不是DataSourceID属性中的数据源之外,我真的很困惑我在做什么与其他人不同。但是,Pager确实为页面的第一页正确分页,所以我不认为是我的绑定把它扔了。

<asp:ListView ID="lvProjects" runat="server" GroupPlaceholderID="groupPlaceHolder"
    ItemPlaceholderID="itemPlaceHolder" OnPagePropertiesChanging="OnPagePropertiesChanging"
    DataKeyNames="ProjectID" OnPreRender="lvProjects_PreRender">
    <LayoutTemplate>
            <asp:DataPager ID="DataPager" runat="server" PagedControlID="lvProjects" PageSize="10">
                <Fields>
                    <asp:NextPreviousPagerField ButtonType="Link" ShowFirstPageButton="true" ShowPreviousPageButton="true" ShowNextPageButton="false"
                        FirstPageText="|&lt;&lt;" PreviousPageText="&lt;" RenderNonBreakingSpacesBetweenControls="true" />
                    <asp:NumericPagerField ButtonType="Link" ButtonCount="10" RenderNonBreakingSpacesBetweenControls="true" />
                    <asp:NextPreviousPagerField ButtonType="Link" ShowNextPageButton="true" ShowLastPageButton="true" ShowPreviousPageButton="false"
                        NextPageText="&gt;" LastPageText="&gt;&gt;|" RenderNonBreakingSpacesBetweenControls="true" />
                </Fields>
            </asp:DataPager>
        <br />
        <br />
        <table class="myGrid projects-table">
            <tbody>
                <asp:PlaceHolder ID="itemPlaceHolder" runat="server" />
            </tbody>
        </table>
    </LayoutTemplate>
    <ItemTemplate>
       ...
    </ItemTemplate>
</asp:ListView>

.

protected void OnPagePropertiesChanging(object sender, PagePropertiesChangingEventArgs e)
{
        var pager = (DataPager)lvProjects.FindControl("DataPager");
        pager.SetPageProperties(e.StartRowIndex, e.MaximumRows, false);
        lvProjects.DataSource = Projects;
        lvProjects.DataBind();
}

查看e.s startrowindex还将显示页面的第一页偏移量的较高的页面(如:第12页将返回"20",@10项/页)。

ASP DataPager返回不正确的StartRowIndex

这显然是由于用SessionPageStatePersister重写了PageStatePersister,如下所示:

protected override PageStatePersister PageStatePersister
{
    get
    {
        return new SessionPageStatePersister(this);
    }
}

我猜DataPager在页面状态中存储了它的总体偏移量,当我改变页面状态的行为时,它不知怎么地丢失了。