4

このコードは、ボタンのクリックイベントに基づいてパネルを動的に作成することについての以前の投稿から取得しました。何らかの理由で、2つのテキストボックスが表示され、コードの解読に問題が発生します。この種のC#を扱ってからしばらく経ちました。それはおそらく簡単な修正ですが、私が言ったように、しばらく経ちました。ASP.netコードは単なるボタンなので、貼り付ける必要はありません。

C#:

public partial class Testing : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
    // Add any controls that have been previously added dynamically
    for (int i = 0; i < TotalNumberAdded; ++i)
    {
        AddControls(i + 1);
    }

    // Attach the event handler to the button
    Button1.Click += new EventHandler(Button1_Click);


}

protected void Button1_Click(object sender, EventArgs e)
{
    // Increase the number added and add the new label and textbox
    TotalNumberAdded++;
    AddControls(TotalNumberAdded);

}
private void AddControls(int controlNumber)
    {
        var newPanel = new Panel();
        var newLabel = new Label();
        var newTextbox = new TextBox();

        // textbox needs a unique id to maintain state information
        newTextbox.ID = "TextBox_" + controlNumber;

        newLabel.Text = "Nature Of Accident";

        // add the label and textbox to the panel, then add the panel to the form
        newPanel.Controls.Add(newLabel);
        newPanel.Controls.Add(newTextbox);
        form1.Controls.Add(newPanel);
    }

    protected int TotalNumberAdded
    {
        get { return (int)(ViewState["TotalNumberAdded"] ?? 0); }
        set { ViewState["TotalNumberAdded"] = value; }
    }



}
4

2 に答える 2

2

ボタンには、すでにaspページに関連付けられているイベントがありますか?

Button1.Click += new EventHandler(Button1_Click);

特にリロード時に問題が発生する可能性があるようです。

于 2012-09-20T17:28:35.577 に答える
2

Button1.Click行をページロードから削除します。

 Button1.Click += new EventHandler(Button1_Click);

.aspxボタンがすでに次のようになっている場合:

<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />

つまり、ボタンをクリックすると、コードはPage_Loadを通過します。つまり、Button1_ClickのEventhandlerが実行され、その後、実際のイベント、つまりButton1_Clickに戻ります。つまり、基本的には2つのテキストボックスを取得する理由。

于 2012-09-20T17:28:48.800 に答える