[英]Timer, UpdatePanel and dynamically created buttons
我有一个带有div(带有runat =“ server”)的更新面板,因此我在计时器滴答事件中动态创建按钮并为其添加按钮。
问题是单击按钮时,该按钮是回发操作,但是按钮消失了,并且不会引发事件。
这是我的aspx页面和后面的c#代码。 我在btn1_click中写的内容实际上没有发生。
我的问题还有一个问题,但是为了简单起见,我想先了解一下上面的内容。
我真的需要您的帮助,非常感谢。
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:Timer ID="Timer1" runat="server" Interval="2000" ontick="Timer1_Tick">
</asp:Timer>
<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
</Triggers>
<ContentTemplate>
<div id="div1" runat="server"></div>
</ContentTemplate>
</asp:UpdatePanel>
<div id="div2" runat="server">div2</div>
</form>
</body>
和这个C#在这里。
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Timer1_Tick(object sender, EventArgs e)
{
CreateControl();
}
void CreateControl()
{
Button btn1 = new Button();
btn1.ID = "btn1";
btn1.Text = "click me";
btn1.Click += new EventHandler(btn1_Click);
div1.Controls.Add(btn1);
}
void btn1_Click(object sender, EventArgs e)
{
div1.InnerHtml += "btn1 was clicked";
}
}
对于动态添加的控件,必须在每个页面加载事件中添加它们。 否则,在到达点击事件时,它们已经消失了。 在这种情况下,我会在每次创建按钮时将按钮添加到会话的按钮集合中,然后在每次回发时重新加载整个集合,因此它不会丢失您已经添加的内容。 另外,在您增加的会话中保存一个int值,这样它们就不会都具有相同的ID。 ID应该是唯一的
就像是:
protected void Page_Load(object sender, EventArgs e)
{
if(Page.IsPostBack)
{
CreateControls(YourCollectionInSession)
}
}
protected void Timer1_Tick(object sender, EventArgs e)
{
CreateControl();
}
void CreateControl()
{
Button btn1 = new Button();
btn1.ID = "btn" + yourSessionID;
btn1.Text = "click me";
btn1.Click += new EventHandler(btn1_Click);
div1.Controls.Add(btn1);
yourSessionID++;
YourCollectionInSession.Add(btn1);
}
void CreateControl(List<Button> buttons)
{
foreach(Button btn in buttons)
{
div1.Controls.Add(btn);
}
}
我之前必须做同样的事情,这种方法对我有用。 只要记住ASPx页面生命周期 。 在处理任何回发事件之前,它将始终命中page_init和page_load,这意味着您的控件早已不复存在。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.