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

时间:2014-05-23 19:55:52

标签: c# asp.net pagination repeater paging

我正试图通过使用转发器将我列出的所有产品划分为页面。例如,有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>

1 个答案:

答案 0 :(得分: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

最后两项是提供的代码中实际问题的位置。