ASP.NET 分页下一页按钮无法正常工作

问题描述 投票:0回答:1

我正在尝试使用中继器将我列出的所有产品划分为页面。例如有3页。分页看起来不错,但是当我单击下一页按钮时,它会转到实际上不存在的第 4 页。可能是什么原因?实施如下。

    private void showShoes() 
    {
        dataInThePage = new PagedDataSource()
        {
            DataSource = ap.getShoes(),
            AllowPaging = true,
            PageSize = 2,
            CurrentPageIndex = pageNo
        };

        shoeRepeater.DataSource = dataInThePage;
        shoeRepeater.DataBind();

        pageAmount = dataInThePage.PageCount - 1;
        //
        pageInfoLabel.Text = "Page: " + (dataInThePage.CurrentPageIndex + 1) + "/" + dataInThePage.PageCount + " - Number of Shoes: " + (dataInThePage.DataSourceCount);
        //
        previousButton.Enabled = !dataInThePage.IsFirstPage;
        nextButton.Enabled = !dataInThePage.IsLastPage;
    }

    private int pageNo
    {
        get
        {
            if (ViewState["pageNumber"] != null)
                return Convert.ToInt32(ViewState["pageNumber"]);
            return 0;
        }
        set
        {
            ViewState["pageNumber"] = value;
        }
    }
    private int pageAmount
    {
        get
        {
            if (ViewState["pageNumber"] != null)
                return Convert.ToInt32(ViewState["pageNumber"]);
            return 0;
        }
        set { ViewState["pageNumber"] = value; }
    }
    public PagedDataSource dataInThePage { get; set; }

    protected void previousButton_Click(object sender, EventArgs e)
    {
        pageNo -= 1;
        showShoes();
    }

    protected void nextButton_Click(object sender, EventArgs e)
    {
            pageNo += 1;
            showShoes();
    }

前端:

                <ajaxToolkit:TabPanel ID="TabPanel5" runat="server">
                <HeaderTemplate>Show Shoes</HeaderTemplate>
                <ContentTemplate runat="server">                                                               
                    <asp:Repeater ID="shoeRepeater" runat="server">
                        <HeaderTemplate></HeaderTemplate>
                        <ItemTemplate>
                            <table border="1" style="border-color:#ff9900; width:400px; font-weight:bold; font-family:'Oswald', Arial, sans-serif;">
                                <tr>
                                    <td rowspan="6" style="width:150px; height:150px;">
                                        <image src="shoeImages/<%#DataBinder.Eval(Container.DataItem,"ImagePath") %>"></image>
                                    </td>
                                </tr>
                                <tr>
                                    <td>
                                        <%#DataBinder.Eval(Container.DataItem,"BrandName") %> - <%#DataBinder.Eval(Container.DataItem,"ModelName") %> 
                                    </td>

                                </tr>
                                <tr>
                                    <td>
                                        Price: $<%#DataBinder.Eval(Container.DataItem,"Price") %>
                                    </td>

                                </tr>
                                <tr>
                                    <td>
                                        Size: <%#DataBinder.Eval(Container.DataItem,"Size") %>
                                    </td>
                                </tr>
                                <tr>
                                    <td>
                                        Color: <%#DataBinder.Eval(Container.DataItem,"PrimaryColor") %> - <%#DataBinder.Eval(Container.DataItem,"SecondaryColor") %> 
                                    </td>
                                </tr>
                                <tr>
                                    <td>
                                        Quantity: <%#DataBinder.Eval(Container.DataItem,"Quantity") %>
                                    </td>

                                </tr>
                            </table>
                        </ItemTemplate>
                        <FooterTemplate></FooterTemplate>
                    </asp:Repeater>
                    <div style="width:600px; height:20px;">
                        <div style="width:50px; height:100%; float:left">
                            <asp:Button ID="previousButton" runat="server" OnClick="previousButton_Click" Text="<<" Width="50px"/>
                        </div>
                        <div style="width:500px; height:100%; float:left; text-align:center">
                            <asp:Label ID="pageInfoLabel" runat="server" Text=" "></asp:Label>
                        </div>
                        <div style="width:50px; height:100%; float:left">
                            <asp:Button ID="nextButton" runat="server" OnClick="nextButton_Click" Text=">>" Width="50px"/>
                        </div>
                    </div>
                </ContentTemplate>               
            </ajaxToolkit:TabPanel>
c# asp.net pagination repeater
1个回答
2
投票

我不得不猜测很多事情,但我能够获取发布的代码并使用 ASP.NET 4.0 项目让它在 VS 2010 中工作。

以下是我为使其正常工作所做的事情:

  • 添加
    Shoe
    POCO,其中包含 .aspx 页面中引用的 8 个公共属性(未显示)
  • 添加一个
    FakeShoeRepository
    类,其中
    private static List<Shoe>
    有 9 只鞋子(未显示)
  • 添加一个名为
    getShoes()
    的静态方法,该方法返回对存储库的私有成员变量的引用(未显示)
  • 设置
    dataInThePage.DataSource = FakeShoeRepository.getShoes()
    (未显示)
  • 添加

    Page_Load()
    活动

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            pageNo = 0;
            showShoes();
        }
    }
    
  • 删除

    pageAmount
    属性

  • 删除
    pageAmount
    方法中设置的一处
    showShoes()
    (这是有效设置
    ViewState["pageNumber"] = PageCount - 1

最后两项是所提供代码中实际问题所在。

© www.soinside.com 2019 - 2024. All rights reserved.