我收到了有關在一組updatepanel上添加動態按鈕事件的查詢。將動態按鈕添加到更新面板並綁定onclick事件ASP.net Webforms
我已經簡化了這個場景,因爲我到目前爲止所使用的代碼太長了,並且連接起來了。我創建了一個包含3個更新面板的測試頁面。
就實際頁面而言,第一個更新面板將用於過濾器,它將依次更新第二個更新面板。第二個更新面板將包含所有結果,具體取決於過濾器......這將是一個按鈕表。
點擊第二個更新面板上的這些按鈕中的任意一個,根據按鈕的ID,結果將在上一次更新面板中生成。
我正面臨的問題是在創建按鈕時綁定按鈕單擊事件。 當我從第一個更新面板的onclick創建按鈕時,它將它添加到佔位符中,但點擊事件根本不會觸發。
這裏是我的測試頁面的一些代碼。
Test.aspx的
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="UpdatePanel2" runat="server" ChildrenAsTriggers="False"
UpdateMode="Conditional">
<ContentTemplate>
<asp:PlaceHolder id="ph2" runat="server"></asp:PlaceHolder>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="UpdatePanel3" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:PlaceHolder id="ph3" runat="server"></asp:PlaceHolder>
</ContentTemplate>
</asp:UpdatePanel>
代碼隱藏:
public partial class test : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
Button up2button = new Button();
up2button.ID = "up2button";
ph2.Controls.Add(up2button);
up2button.Click += new EventHandler(up2button_Click); // Not being registered?
AsyncPostBackTrigger trigger1 = new AsyncPostBackTrigger();
trigger1.ControlID = "up2button";
trigger1.EventName = "Click";
UpdatePanel2.Triggers.Add(trigger1);
ScriptManager1.RegisterAsyncPostBackControl(up2button);
UpdatePanel2.Update();
}
protected void up2button_Click(object sender, EventArgs e) { //and not being fired
Button up3button = new Button();
up3button.ID = "up3button";
up3button.Click += new EventHandler(up3button_click);
ph3.Controls.Add(up3button);
AsyncPostBackTrigger trigger1 = new AsyncPostBackTrigger();
trigger1.ControlID = "up3button";
trigger1.EventName = "Click";
UpdatePanel3.Triggers.Add(trigger1);
UpdatePanel3.Update();
}
protected void up3button_click(object sender, EventArgs e) {
}
}
謝謝你們的時間。