我已经为这个问题尝试了几种解决方案,但它们都没有奏效.
基本上,我有一个员工表,用户可以选择通过更新面板动态添加员工.每个员工都被添加为LinkButton,此按钮将通过OnClick事件触发ajaxToolkit:modalpopupextender窗口,此窗口将显示员工详细信息.
问题是,当我点击员工姓名时,弹出窗口会显示但不会显示详细信息.
基本上,我有一个员工表,用户可以选择通过更新面板动态添加员工.每个员工都被添加为LinkButton,此按钮将通过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; }
产量