同様の質問が多く寄せられていることがわかりました。しかし、私の場合、Page_Load にも OnInit にもユーザー コントロールを追加したくありません。ページ上のボタンがクリックされたときに、ユーザー コントロールを PlaceHolder に動的に追加したいと考えています。コントロールを読み込むことができ、問題なく表示されます。しかし、そのユーザー コントロールのボタンは機能しません。イベント ハンドラは起動しません。さらに悪いことに、ユーザー コントロールのボタンをクリックすると、ユーザー コントロール全体が消えてしまいます。
これは、「RefreshButton」を持つユーザー コントロールであり、そのイベント ハンドラーは単に MessageLabel を DateTime.Now で更新します。
------------------- TestUC.ascx -------------------------------- --
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TestUC.ascx.cs" Inherits="PASS.Web.UserControls.TestUC" %>
TestUC:
<asp:Label ID="MessageLabel" runat="server"></asp:Label>
<asp:Button ID="RefreshButton" runat="server" Text="Refresh" onclick="RefreshButton_Click" />
---------------- TestUC.ascx.cs ----------------------------- -
protected void Page_Load(object sender, EventArgs e)
{ }
protected void RefreshButton_Click(object sender, EventArgs e)
{
this.MessageLabel.Text = " Server Time: " + DateTime.Now.ToString();
}
親ページには、AddButton とプレース ホルダーがあります。AddButton がクリックされるたびに、TestUC.ascx のインスタンスが作成されます (作成されるはずです)。
------------ Test.aspx ----------------
<asp:Panel ID="DynamicUserControlPanel" runat="server">
<asp:Button ID="AddButton" runat="server"Text="Add New User Control Dynamically" onclick="AddButton_Click" />
<asp:Panel ID="PlaceHolder" runat="server"></asp:Panel>
</asp:Panel>
----------- Test.aspx.cs ----------------
protected void AddButton_Click(object sender, EventArgs e)
{
UserControls.TestUC uc = LoadControl("~/UserControls/TestUC.ascx") as UserControls.TestUC;
uc.ID = RandomStringGenerator.Generate(10);
this.PlaceHolder.Controls.Add(uc);
}
まず、AddButton をクリック (およびクリックし続ける) すると、TestUC.ascx のインスタンスが 1 つだけ追加されて表示されます。次に、ユーザー コントロールの RefreshButton が起動しません。第 3 に、RefreshButton がクリックされると、ユーザー コントロールが消えます。
ボタンのクリック時にユーザー コントロールを動的に追加するというアイデアは実現可能ですか? 誰かがそれを達成するための簡単な例を提供できますか?
事前にどうもありがとうございました。