【问题标题】:ASP.NET Paging next page button does not work properlyASP.NET Paging 下一页按钮无法正常工作
【发布时间】:2014-07-13 07:10:13
【问题描述】:

我正在尝试通过使用转发器来划分我列出的所有产品到页面。例如有 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 paging


    【解决方案1】:

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

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

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

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

    • 删除pageAmountshowShoes() 方法中设置的一个位置(这实际上是在设置ViewState["pageNumber"] = PageCount - 1

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

    【讨论】:

    • 为什么要提供前5个条件?我无法理解主要思想,因为正如你所说,最后 2 个就足够了。
    • 我添加这些是因为我想记录我对您的问题所做的假设。它们是我制作一个工作示例并找到问题所必需的。
    猜你喜欢
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多