0

以下のコードに基づくと、機能していないようです。Page_Loadの後にコントロールをページに動的に追加できますが、EventHandlerをページに接続することはできません。

これが私のコードビハインドです:

public partial class AddingControlsToPanelAtRuntime : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        DrawPage();
    }

    private void DrawPage()
    {
        Label label;

        label = new Label();
        label.ID = "Label1";
        label.Text = "Label 1";
        Panel1.Controls.Add(label);
        Panel1.Controls.Add(new LiteralControl("<br />"));

        label = new Label();
        label.ID = "Label2";
        label.Text = "Label 2";
        Panel1.Controls.Add(label);
        Panel1.Controls.Add(new LiteralControl("<br />"));

        LinkButton linkButton1 = new LinkButton();
        linkButton1.ID = "linkButton1";
        linkButton1.Text = "linkButton 1";
        linkButton1.Click += new EventHandler(LinkButton_Click);
        Panel1.Controls.Add(linkButton1);
        Panel1.Controls.Add(new LiteralControl("<br />"));

        LinkButton linkButton2 = new LinkButton();
        linkButton2.ID = "linkButton2";
        linkButton2.Text = "linkButton 2";
        linkButton2.Click += new EventHandler(LinkButton_Click);
        Panel1.Controls.Add(linkButton2);

    }

    protected void LinkButton_Click(object sender, EventArgs e)
    {
        Panel1.Controls.Add(new LiteralControl("<p>"));
        LinkButton linkButton4 = new LinkButton();
        linkButton4.ID = "linkButton4";
        linkButton4.Text = "linkButton 4";
        linkButton4.Click += new EventHandler(LinkButton_Click);
        Panel1.Controls.Add(linkButton4);
    }

}

したがって、Page_Loadから呼び出されるDrawPage()では、すべてのコントロールがPanelに適切に追加され、EventHandlerが完全に接続されます。

LinkBut​​ton1またはLinkBut​​ton2をクリックすると、LinkBut​​ton_Click()が正しく呼び出されます。LinkBut​​ton_Click()で、実行時に別のコントロールを追加し、EventHandlerを接続しますが、そのリンクボタンをクリックすると、Page_Loadにポストバックするだけで、LinkBut​​ton_Click()は呼び出されません。

それで、私がここでやろうとしていることは、ASP.NETパイプラインに基づいて不可能ですか?

4

1 に答える 1

0

やりたいことは可能です。ページのライフサイクルを本当に意識することは役に立ちます。 http://msdn.microsoft.com/en-us/library/ms178472.aspx

あなたのページで現在起こっていることは次のとおりです。

Page_Load
     Create Controls (label 1/2, linkbutton 1/2)

-> Browser renders label 1/2, linkbutton 1/2
-> User Clicks link button 1 or 2

Page_Load
     Create Controls (label 1/2, linkbutton 1/2)
Control events fire
     LinkButton_Click fires
          Adds another linkbutton (linkbutton 4)

-> Browser renders label 1/2, linkbutton 1/2 AND 4
-> User Clicks link button 4

Page_Load
     Create Controls (label 1/2, linkbutton 1/2)
Control events fire
     (There is no link button 4 so nothing happens)

-> Browser renders label 1/2, linkbutton 1/2 (4 is missing)

欠落しているコア部分は、動的に作成されたコントロールを再追加することです。すべてのコントロールは、ポストバックごとに再読み込みする必要があります (viewstate を気にする場合は同じ順序で)。ビューステートまたはその他のポストバック永続メカニズムを介して、何を読み取る必要があるかを追跡できます。

于 2012-07-10T02:58:31.080 に答える