簡體   English   中英

ASP.NET將UserControl動態添加到PlaceHolder,不觸發Click事件,僅觸發Page_Load

[英]ASP.NET dynamically adding UserControl to PlaceHolder, not fire Click Event, only Page_Load

在我的ASP.Net頁面中,我有PlaceHolder和Button。 當用戶單擊此按鈕時,我將接口方法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將不會出現。 僅網頁刷新。 我已經准備好了一些答案,但我想不出如何輕松地解決此問題。

如果您觸發* myButton_ServerClick *事件,則會調用回發並且ASP.Net希望觸發該事件,但是您的控件未添加到頁面中,這就是ASP.Net忽略此事件的原因。

在回發之后和要觸發的事件之前,必須再次添加控件,在它們之后,將調用event。

更新資料

像這樣

頁:

<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";
    }

請注意,通過以下方法添加了UserControls-//首先創建用戶控件的實例var control = Page.LoadControl(“〜/ folder1 / UserControl1.ascx”)

//現在將此控件添加為占位符-placeHolder1.Controls.Add(control);

我希望這有幫助。

page.aspx

<asp:PlaceHolder ID="PlaceHolder1" runat="server" ></asp:PlaceHolder>

page.aspx.vb

Private Sub CreateControl()
    Dim vw As Control
    vw = CType(LoadControl("~/View01.ascx"), View01)
    vw.ID = "View_Dyn"
    PlaceHolder1.Controls.Clear()
    PlaceHolder1.Controls.Add(vw)
End Sub

每次回發都重新創建

Private Sub Page_Init(sender As Object, e As System.EventArgs) Handles Me.Init
    CreateControl()
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM