asp.net – 动态创建的LinkBut​​tons的OnClick事件不起作用

前端之家收集整理的这篇文章主要介绍了asp.net – 动态创建的LinkBut​​tons的OnClick事件不起作用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经为这个问题尝试了几种解决方案,但它们都没有奏效.
基本上,我有一个员工表,用户可以选择通过更新面板动态添加员工.每个员工都被添加为LinkBut​​ton,此按钮将通过OnClick事件触发ajaxToolkit:modalpopupextender窗口,此窗口将显示员工详细信息.
问题是,当我点击员工姓名时,弹出窗口会显示但不会显示详细信息.

这是我正在创建按钮并将其放入表中的代码

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();
    }

解决方法

检查这个答案

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

这解释了动态控件的行为

你需要考虑:

>当您不使用母版页时,应在PreInit事件中创建动态控件,如果是,则在Init事件中创建控件
>避免在这些事件中设置可以在每个帖子中更改的属性,因为在应用视图状态时(在事件后),属性将被覆盖
>每次发布​​页面时都必须创建动态控件,如果(!this.IsPostBack)this.CreatemyDynamicControls();
>当您在PreInit或Init事件中创建控件时,它们的状态将自动设置在post事件中,这意味着在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;
    }

产量

猜你在找的asp.Net相关文章