【问题标题】:Issue in custom pagination自定义分页问题
【发布时间】:2016-10-26 20:24:15
【问题描述】:

我写过类似的代码

          protected void lnkprev_Click(object sender, EventArgs e)
    {

        List<ListItem> pages = new List<ListItem>();
        int pagecount = Convert.ToInt32(Session["pagecount"].ToString());
        int lastnumber = Convert.ToInt32(Session["lastnumber"].ToString());
        int prevtennumber = lastnumber - 10;
        for (int i=prevtennumber ; i <= pagecount; i++)
        {
            if (i < prevtennumber)
            {
                pages.Add(new ListItem(i.ToString(), i.ToString(), i != PageIndex));
                if (i == 1)
                {
                    lnkprev.Visible = false;
                }
            }
            Session["lastnumber"] = prevtennumber;
            Session["pagecount"] = pagecount;
            rptPager.DataSource = pages;
            rptPager.DataBind();
        }
     }

    protected void lnknext_Click(object sender, EventArgs e)
    {
        List<ListItem> pages = new List<ListItem>();
        int pagecount = Convert.ToInt32(Session["pagecount"].ToString());
        int lastnumber = Convert.ToInt32(Session["lastnumber"].ToString());
        int nexttennumber = lastnumber + 10;
        for (int i = lastnumber; i <= pagecount; i++)
        {
            if (i < nexttennumber)
            {
                pages.Add(new ListItem(i.ToString(), i.ToString(), i != PageIndex));
                if (i == pagecount)
                {
                    lnknext.Visible = false;
                }
           }
            Session["lastnumber"] = nexttennumber;
            Session["pagecount"] = pagecount;
            rptPager.DataSource = pages;
            rptPager.DataBind();
        }
    }

我正在使用页码填充转发器,该页码用于网格视图中的分页。实际上,我首先必须显示前十个数字。当用户单击下一步按钮时,页码应从 10 到 20 开始,依此类推。 现在下一个按钮工作正常。上一个按钮无法正常工作。 请帮忙!!!

【问题讨论】:

  • 这是一个糟糕的分页设计——你会在会话中保存下一页、页码等等吗?你有没有想过一个用户可以同时打开多个页面。
  • 是的,你是对的!!!我是否将它们存储在 cookie 中
  • cookie 是最差的,和 session 一样——你用参数把它保存在它自己的 url 上
  • 还有其他方法吗,我们用url很难。因为在整个项目中都使用了分页控件
  • 您只有 2 个选项 - 要么发布要么获取。

标签: c# asp.net c#-4.0 pagination


【解决方案1】:

当您调试代码时,首先要做的是尝试让您的工作更轻松

让我们快速重构您的 next() 函数,看看当您像在此处所做的那样复制/粘贴代码时出了什么问题。根据您的具体观点,请随时纠正我在此处可能犯的任何写作错误。

 protected void CreatePages(int startingPoint, int checkingPoint, int endPoint, Button button)
        {
            List<ListItem> pages = new List<ListItem>();
            for (i = startingPoint; i < endPoint; i++)
            {
            if (i < checkingPoint)
            {
                pages.Add(new ListItem(i.ToString(), i.ToString(), i != PageIndex));
                if (i == endPoint)
                {
                    button.Visible = false;
                }
           }
            }
            Session["lastnumber"] = checkingPoint;
            Session["pagecount"] = endPoint;
            rptPager.DataSource = pages;
            rptPager.DataBind();
            }

   protected void lnknext_Click(object sender, EventArgs e)
    {
        int pagecount = Convert.ToInt32(Session["pagecount"].ToString());
        int lastnumber = Convert.ToInt32(Session["lastnumber"].ToString());
        int nexttennumber = lastnumber + 10;
        CreatePagesAndBindRepeater(lastnumber, nexttennumber, pagecount, lnknext);
        }

现在,您实际上为 prev() 所做的是:

         protected void lnkprev_Click(object sender, EventArgs e)
{

    int pagecount = Convert.ToInt32(Session["pagecount"].ToString());
    int lastnumber = Convert.ToInt32(Session["lastnumber"].ToString());
    int prevtennumber = lastnumber - 10;
    CreatePagesAndBindRepeater(lastnumber, prevtennumber, pagecount, lnkprev);
     }

这是错的;你在这个函数中向前迭代,而不是向后,使你的检查不起作用,给你带来你所面临的所有麻烦。在这种情况下,设置迭代器的增量将允许您以有效的方式执行这两种行为(Raphaël Althaus 指出了主要缺陷)


无论如何,使用会话记录导航数据很麻烦,原因有很多(导航期间删除了 Coockie、超时、强制在您的服务器中跟踪状态......)

您应该改用请求数据,并将您的转发器与您收到的每个请求相应地绑定。

【讨论】:

    【解决方案2】:

    除此之外(我认为还有代码重写工作要做)

    for (int i=prevtennumber ; i <= pagecount; i++)
            {
                //this will never be reached, as you start with i = prevtennumber
                if (i < prevtennumber)
    

    所以我至少会说(或除 prevtennumber 之外的任何合乎逻辑的东西)

    if (i < lastnumber)
    

    【讨论】:

      猜你喜欢
      • 2018-09-23
      • 2011-07-13
      • 2011-01-18
      • 2023-02-22
      • 1970-01-01
      • 1970-01-01
      • 2012-11-29
      • 2011-11-18
      • 1970-01-01
      相关资源
      最近更新 更多