2

私はasp.net CompositeControlsにかなり慣れていません...ロード時に1つのボタンを追加する必要があるタスクがあり、ユーザーがクリックすると別のボタンが追加され、2番目のボタンがクリックされるとラベルが表示されます示す。

問題は、2 番目のボタンをクリックしてページがポストバックを終了した後、ページ全体が初期状態に戻り、ラベルが表示されないことです。したがって、最初のボタンクリックは発生しますが、2 番目のイベントは発生しません。チェックするブレークポイントも作成しましたが、「btn_submit2_Click」にアクセスしません

test1Composite.cs:

using System;
using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace test1File
{
    [DefaultProperty("Text")]
    [ToolboxData("<{0}:test1 runat=server></{0}:test1>")]

    public class test1 : CompositeControl 
    {
        protected Button btn_submit1;
        protected Button btn_submit2;

        [Bindable(true)]
        [Category("Appearance")]
        [DefaultValue("")]
        [Localizable(true)]
        protected override void CreateChildControls()
        {
            btn_submit1 = new Button();
            btn_submit1.Text = "Click me!";
            btn_submit1.Click +=new EventHandler(btn_submit1_Click);
            this.Controls.Add(btn_submit1);
            this.ChildControlsCreated = true;
        }
        protected void btn_submit1_Click(object sender, EventArgs e)
        {
            btn_submit2 = new Button();
            btn_submit2.Text = "Click me!";
            btn_submit2.Click += new EventHandler(btn_submit2_Click);
            this.Controls.Add(btn_submit2);
        }
        protected void btn_submit2_Click(object sender, EventArgs e)
        {
            Label lbl_done = new Label();
            lbl_done.Text = "Thank you :)";
            this.Controls.Add(lbl_done);
        }
    }
}

Default.cs:

using System;

namespace test1File
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            test1 pl = new test1();
            form1.Controls.Add(pl);
        }
    }
}

オンラインで検索したところ、「おそらく」OnInitをオーバーライドする必要があることがわかりましたが、CreateChildControls()を配置しても役に立たない...おそらくここで何か間違ったことをしている..どんな助けもありがとう。

4

1 に答える 1