在asp中动态链接按钮触发事件的问题

时间:2017-01-19 15:23:28

标签: c# asp.net events dynamic linkbutton

我的asp页面中的动态链接按钮出现问题。我使用它们为网格视图进行自定义分页。这个想法是我想要显示它们20左右。它正在工作的第20个。当我显示它们时它可以。然后我按下一个显示下一个20.当我按下一个,它显示我,但如果按下一个按钮而不是最初的20,它将在前20个。

我的初始页面:

override protected void OnInit(EventArgs e)
{
    base.OnInit(e);
    if (this.Tag.Equals("Shareholder"))
    {   
        InitComponents(false);  
    }

    /// Must be done everytime the page loads.
    InitializeList();

    if (!IsPostBack)
        InitializeUI();
}

初始化链接按钮

private void InitComponents(Boolean Prev)
{
        PanelPager.Controls.Clear();
        int nrInregistrari = Convert.ToInt32(DAActionar.CountActionari(11, LastBtnIndex));
        if (Prev == true)
        {
            LinkButton lnkPrev = new LinkButton();
            lnkPrev.Text = "Prev";
            PanelPager.Controls.Add(lnkPrev);
        }

        int BtnDeAfisat = 0;
        if (nrInregistrari > BTN_PER_SERIE * PAGE_SIZE)
        {
            BtnDeAfisat = BTN_PER_SERIE;
        }
        else
            BtnDeAfisat = nrInregistrari / PAGE_SIZE + 1;

        for (int index = 1; index <= BtnDeAfisat; index++)
        {
            int pageNo = index + LastBtnIndex;
            LinkButton lnk = new LinkButton();
            lnk.Click += new EventHandler(PageChange);
            lnk.ID = "PageLink" + pageNo.ToString();
            lnk.CommandName = "Page";
            lnk.Text = " " + pageNo.ToString() + " ";
            lnk.CommandArgument = index.ToString();

            PanelPager.Controls.Add(lnk);

        }

        LinkButton lnkNext = new LinkButton();
        lnkNext.Click += new EventHandler(NextPage);
        lnkNext.Text = "Next";
        PanelPager.Controls.Add(lnkNext);
        LastBtnIndex += BtnDeAfisat;


}

下一个按钮的事件

 private void NextPage(object sender, EventArgs e) 
 {
     InitComponents(true);
 }

PageChange:

  public void PageChange(object sender, EventArgs e)
        {
            int pageIndex = int.Parse((sender as LinkButton).CommandArgument) + 1;
            object dataSource = GetDataSource(OwnerId, null, pageIndex);
            PushData(dataSource);

        }

1 个答案:

答案 0 :(得分:0)

在ASP.NET中,只有作为Page_Load一部分添加的控件才会附加事件并执行。同样在执行服务器端事件时,页面将自身发回,在此期间首先执行page_load,然后执行事件处理程序代码。

因此,您执行了第一组按钮事件,因为它们作为page_load的一部分附加到事件中。现在,在这些按钮的事件中,您正在调用InitComponents方法。因此,正如我在事件期间首先解释的那样,page_load首先调用InitComponents方法,该方法向面板添加按钮,但InitComponents方法再次作为事件处理程序代码的一部分执行,该代码从Panel中删除控件并重新创建它们并将它们再次添加到Panel。 / p>

现在,因为在第二次执行InitComponents方法期间创建的控件不是page_load的一部分,所以当您单击它们时,附加到它们的流事件不会触发。它只是回发了再次执行InitComponents的页面,并在面板中创建了新的控件,他们的事件工作正常,因为它们是作为page_load流程的一部分创建的。

如果它让你困惑,请原谅我。

现在解决方法是使用一个控件,它可以根据项目数自动为你创建许多按钮,并且一直触发事件。

我现在没有任何工作适合你。我发现这篇文章带有工作示例代码,您可以将其视为示例并在您的工作中实现。

http://www.aspsnippets.com/Articles/Implement-Paging-in-DataList-control-in-ASPNet.aspx

该示例说明了如何显示页码以及如何根据所选页码绑定数据。