1

在我的 ASP.Net 页面中,我有 PlaceHolder 和 Button。当用户单击此按钮时,我将一些用户控件从我的接口方法 getControl 添加到 PlaceHolder。代码:

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

方法获取控制:

    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 不会上升。只有网页刷新。我准备了一些答案,但我不知道解决这个问题有多容易。

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 回答
0

页面.aspx

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

页面.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
于 2016-02-01T14:54:54.097 回答