[英]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.