【问题标题】:Dynamically Added LinkButtons Don't Fire OnClick Event动态添加的链接按钮不会触发 OnClick 事件
【发布时间】:2012-07-27 20:22:12
【问题描述】:

我需要在我的网页上进行分页。我为此使用 PagedDataSource。但我需要在 .aspx 上枚举页面,因此我将LinkButtons 动态添加到PlaceHolder 并为所有这些页面写一个Eventhandler。它显示和工作正常。在第一次点击时Eventhandler 被触发。在第二个它不火。第三个是。等等……有什么想法吗?

    protected void Page_Load(object sender, EventArgs e)
    {
        bindrepeater();
    }


    private void bindrepeater()
    {
        var service = new Service();
        var coll = service.GetPeople();

        PagedDataSource Pds1 = new PagedDataSource();
        Pds1.DataSource = coll;
        Pds1.AllowPaging = true;
        Pds1.PageSize = 10;
        Pds1.CurrentPageIndex = CurrentPage;

        Repeater1.DataSource = Pds1;
        Repeater1.DataBind();

        var count = (coll.Count / 10) + 1;
        pages.Controls.Clear();
        for (int i = 1; i < count; i++)
        {
            var lb = new LinkButton() { Text = i.ToString(), CssClass = "hrefia" };
            lb.Click += new EventHandler(lb_Click);
            pages.Controls.Add(lb);
        }
    }

    protected void lb_Click(object sender, EventArgs e)
    {
        var lb = (LinkButton)sender;
        CurrentPage = int.Parse(lb.Text);
        bindrepeater();
    }

    public int CurrentPage
    {
        get
        {
            object s1 = this.ViewState["CurrentPage"];
            if (s1 == null)
            {
                return 0;
            }
            else
            {
                return Convert.ToInt32(s1);
            }
        }
        set { this.ViewState["CurrentPage"] = value; }
    }

【问题讨论】:

  • 你好,问题是你必须为你的 LinkBut​​ton 设置一个 ID 才能正常工作
  • 我添加了它,现在它永远不会触发。完全停止射击
  • 你好,我试过了,在设置点击处理程序之前它可以工作(你确定设置lb.ID = ...)吗?
  • 工作!但是很奇怪。我添加了 var lb = new LinkBut​​ton() { ID = Guid.NewGuid().ToString(), Text = i.ToString(), CssClass = "hrefia" }; 像这样,但它没有用。写下答案,我会接受。

标签: c# asp.net .net dynamic paging


【解决方案1】:

需要为所有链接按钮提供 ID。 @Hassan Boutougha 在 cmets 中回答了我...

var lb = new LinkButton() { Text = i.ToString(), CssClass = "hrefia" };
lb = "btnId" + i.ToString();

【讨论】:

    【解决方案2】:

    一件快速的事情,在根据您的代码首次加载时,您的当前页面索引将返回为 0。 然后在随后的页面点击中,例如点击第 2 页,返回的当前页面索引将为 2,但是如果页面索引以 0 开头,则 2 表示第 3 页而不是第 2 页。 所以我想在设置当前页面时你应该这样做:

    protected void lb_Click(object sender, EventArgs e)
    {   
        var lb = (LinkButton)sender;      
        CurrentPage = int.Parse(lb.Text) **- 1**;
        bindrepeater();   
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多