0

同様の質問が多く寄せられていることがわかりました。しかし、私の場合、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 がクリックされると、ユーザー コントロールが消えます。

ボタンのクリック時にユーザー コントロールを動的に追加するというアイデアは実現可能ですか? 誰かがそれを達成するための簡単な例を提供できますか?

事前にどうもありがとうございました。

4

1 に答える 1

1

Page_Load にも OnInit にもユーザー コントロールを追加したくない

その後、コードは機能しません。

すべての投稿でコントロールを再作成する必要があります。これを達成するためのデモコードがあります:

ノート。この例では、ユーザーがボタンを押してすべてのイベントが機能すると、オンデマンドでユーザー コントロールがページに動的に追加されます。

出力

ここに画像の説明を入力

コードビハインド

    protected void Page_Init(object sender, EventArgs e)
    {
        for (int i = 0; i < this.DynamicControlsCount; i++)
        {
            var c = this.LoadControl("~/AddressControl.ascx");

            this.addresses.Controls.Add(c);
        }
    }

    protected void addAddress_Click(object sender, EventArgs e)
    {
        this.DynamicControlsCount++;
        var c = this.LoadControl("~/AddressControl.ascx");

        this.addresses.Controls.Add(c);
    }

    protected int DynamicControlsCount
    {
        get
        {
            if (string.IsNullOrWhiteSpace(this.Request.Form["numberOfControls"]))
            {
                return 0;
            }
            return int.Parse(this.Request.Form["numberOfControls"]);
        }
        set
        {
            int temp = int.Parse(this.numberOfControls.Value);
            temp++;
            this.numberOfControls.Value = temp.ToString();
        }
    }

ASPX

    <asp:PlaceHolder runat="server" ID="addresses" /><br />
    <asp:HiddenField runat="server" ID="numberOfControls" Value="0" />
    <asp:Button Text="Add Address" runat="server" ID="addAddress" OnClick="addAddress_Click" />
于 2012-08-10T07:08:20.770 に答える