-->

动态创建了LinkBut​​ton的OnClick事件不工作(OnClick event of dy

2019-06-25 16:51发布

我试过这个问题几种解决方案,但没有一次成功。 基本上,我有员工的表和用户具有动态地添加雇员通更新面板的选择。 每一位员工被添加为LinkBut​​ton的 ,这个按钮将火ajaxToolkit:modalpopupextender窗口,通过OnClick事件,而这个窗口会显示雇员的详细信息。 问题是,当我点击员工姓名的弹出窗口会出现, 细节的习惯。

这是在我创建的按钮,并把它在表中的代码:

LinkButton lbtn = new LinkButton();
                    lbtn.ID = employee_arry[i] + "_lbtn" + i;
                    lbtn.Text = employee_arry[i];
                    lbtn.Click += new EventHandler(this.employee_info);
                    lbtn.CausesValidation = false;
                    lbtn.Attributes.Add("runat", "server");
                    cell.Controls.Add(lbtn);

这里是employee_info方法:

//the info will be pulled from the database…
public void employee_info(object sender, EventArgs e)
    { 
        name.Text = "employee name";
        dept.Text = "employee department";
        jobt.Text = "employee job title";
        email.Text = "employee email";
        tel.Text = "employee telephone";
        ModalPopupExtender1.Show();
    }

Answer 1:

检查这个答案

https://stackoverflow.com/a/11127064/1268570

这就解释了动态控制的行为

你需要考虑:

  • 动态控制应在PreInit事件被创建时,你是不是有一个母版页的工作,如果你是,那么在Init事件创建控件
  • 避免设置,可以在这些事件中的每个交来改变属性,因为当施加视图状态(在后事件)的属性将被覆盖
  • 如果动态控件必须创建每次页面发布时间,避免这种this.CreatemyDynamicControls()(this.IsPostBack!);
  • 当您创建在PreInit或init事件的控制,他们的状态会自动在后事件,这意味着在LoadComplete事件的控件将再次包含其状态恢复,甚至当你创建它们在每个岗位,甚至当你没有设置没有明确设置自己的状态。 请注意,此行为是不同的,当你正在处理在设计时创建的控件,在这种情况下,如果国家已设置的事件是Load事件
  • 事件认购PageLoadComplete之前应该发生,否则将不会引发

编辑1

如果你还没有找到一个解决方案,这是一个办法做到这一点(全工作示例):

ASPX

    <asp:ScriptManager runat="server" />
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" ViewStateMode="Enabled">
        <ContentTemplate>
            <asp:Panel runat="server" ID="myPanel">
            </asp:Panel><br />
            <asp:Button ID="Button1" Text="add control" runat="server" OnClick="addControl_Click" /><br />
            <asp:Label ID="lblMessage" runat="server" />
        </ContentTemplate>
    </asp:UpdatePanel>

后面的代码

    protected int NumberOfControls
    {
        get
        {
            if (ViewState["c"] == null)
            {
                return 0;
            }

            return int.Parse(ViewState["c"].ToString());
        }
        set
        {
            ViewState["c"] = value;
        }
    }

    protected void addControl_Click(object sender, EventArgs e)
    {
        this.NumberOfControls++;
        this.myPanel.Controls.Add(new Literal { Text = "<br />" });
        this.myPanel.Controls.Add(this.CreateLinkButton(this.NumberOfControls));
    }

    protected void Page_PreLoad(object sender, EventArgs e)
    {
        this.CreateDynamicLinkButtons();
    }

    private void CreateDynamicLinkButtons()
    {
        for (int i = 0; i < this.NumberOfControls; i++)
        {
            this.myPanel.Controls.Add(new Literal { Text = "<br />" });
            this.myPanel.Controls.Add(this.CreateLinkButton(i + 1));
        }
    }

    private LinkButton CreateLinkButton(int index)
    {
        var l = new LinkButton { Text = "MyLink" + index.ToString(), ID = "myLinkID" + index.ToString() };
        l.Click += (x, y) =>
        {
            this.lblMessage.Text += "<br/>ID: " + (x as LinkButton).ID;
        };

        return l;
    }

产量



文章来源: OnClick event of dynamically created LinkButtons is not working