我试过这个问题几种解决方案,但没有一次成功。 基本上,我有员工的表和用户具有动态地添加雇员通更新面板的选择。 每一位员工被添加为LinkButton的 ,这个按钮将火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();
}
检查这个答案
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;
}
产量