1

私の ASP.Net ページには、PlaceHolder と Button があります。ユーザーがこのボタンをクリックすると、Interface メソッド getControl からいくつかの UserControls を PlaceHolder に追加します。コード:

    protected void ActionBtn_Click(object sender, EventArgs e)
    {
        if (provider != null)
        {
            actualObject = (PlaceHolder)provider.getControl();
            PlaceHolder1.Controls.Add(actualObject);
        }
    }

メソッド getControl:

    public object getControl()
    {
        ph = new PlaceHolder();

        exportInbBtn = new Button();
        exportInbBtn.Text = "Export Inventury";
        exportInbBtn.Click += new EventHandler(myButton_ServerClick);
        ph.Controls.Add(exportInbBtn);
        exportInbBtn.ID = "exportInbBtn";

        return ph;
    }

ASP ページのメソッド Page_Load と Page_Init は空です。問題は、ユーザーがボタン exportInbBtn (テキスト: "Export Inventury") をクリックすると、クリック イベント myButton_ServerClick が発生しないことです。Web ページの更新のみ。私はいくつかの答えを用意していますが、この問題をどのように簡単に解決できるかわかりません。

4

3 に答える 3

5

*myButton_ServerClick* イベントを起動すると、ポストバックが呼び出され、ASP.Net は呼び出されたイベントを起動しようとしますが、コントロールがページに追加されないため、ASP.Net はこのイベントを無視します。

ポストバックの後、イベントが発生する前に、コントロールを再度追加する必要があります。その後、イベントが呼び出されます。

アップデート

このようなもの

ページ:

<asp:Button runat="server" ID="btnTest" Text="Add control" OnClick="btnTest_Click"/>
<asp:Label runat="server" ID="result"></asp:Label>
<asp:HiddenField runat="server" ID="controlLoaded"/>
<asp:PlaceHolder runat="server" ID="phTest"></asp:PlaceHolder>

コードビハインド:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (controlLoaded.Value == "1")
        {
            AddControl();
        }
    }

    protected void btnTest_Click(object sender, EventArgs e)
    {
        AddControl();
    }

    protected void myButton_ServerClick(object sender, EventArgs e)
    {
        result.Text = "OK";
    }

    public object getControl()
    {
        var ph = new PlaceHolder();

        var exportInbBtn = new Button();
        exportInbBtn.Text = "Export Inventury";
        exportInbBtn.Click += new EventHandler(myButton_ServerClick);
        ph.Controls.Add(exportInbBtn);
        exportInbBtn.ID = "exportInbBtn";

        return ph;
    }

    private void AddControl()
    {
        var actualObject = (PlaceHolder)getControl();
        phTest.Controls.Add(actualObject);
        controlLoaded.Value = "1";
    }
于 2013-10-10T18:34:50.180 に答える
2

UserControls は以下のメソッドによって追加されることに注意してください - // 最初にユーザー コントロールのインスタンスを作成します var control = Page.LoadControl("~/folder1/UserControl1.ascx")

// このコントロールを次のようにプレースホルダーに追加します - placeHolder1.Controls.Add(control);

これが役立つことを願っています。

于 2017-06-29T06:16:44.713 に答える