0

我已经为这个问题尝试了几种解决方案,但都没有奏效。基本上,我有一张员工表,用户可以选择通过更新面板动态添加员工。每个员工都被添加为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();
    }
4

1 回答 1

2

检查这个答案

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

这解释了动态控件的行为

你需要考虑:

  • 当您不使用母版页时,应在 PreInit 事件中创建动态控件,如果是,则在 Init 事件中创建控件
  • 避免在这些事件中设置可以在每个帖子中更改的属性,因为当应用视图状态时(在帖子事件中),这些属性将被覆盖
  • 每次发布页面时都必须创建动态控件,避免这种情况 if(!this.IsPostBack) this.CreatemyDynamicControls();
  • 当您在 PreInit 或 Init 事件中创建控件时,它们的状态将在 post 事件中自动设置,这意味着在 LoadComplete 事件中,您的控件将包含它们的状态,即使您在每个 post 中再次创建它们,即使您做了没有明确设置他们的状态。请注意,当您处理在设计时创建的控件时,此行为是不同的,在这种情况下,已设置状态的事件是 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;
    }

输出

在此处输入图像描述

于 2012-06-23T07:38:14.480 回答