updatepanel のセットに動的な onclick イベントを持つ動的なボタンを追加することに関する問い合わせを受けました。
これまでのコードは長すぎて縛られているため、シナリオを単純化しました.3 つの更新パネルを含むテスト ページを作成しました。
実際のページに関しては、最初の updatepanel はフィルター用であり、フィルターは 2 番目の update panel を更新します。2 番目の更新パネルは、フィルターに応じてすべての結果で構成されます。これはボタンのテーブルになります。
2 番目の更新パネルでこれらのボタンのいずれかをクリックすると、ボタンの ID に応じて、最後の更新パネルで結果が生成されます。
私が直面している問題は、ボタンの作成時にボタン クリック イベントを結び付けることです。最初の更新パネルの onclick からボタンを作成すると、プレースホルダーに追加されますが、クリック イベントはまったく発生しません。
これが私のテストページのコードです。
テスト.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) {
}
}
お時間をいただきありがとうございます。