c# - ASP.NET 动态添加 UserControl 到 PlaceHolder,不触发 Click 事件,只触发 Page_Load

标签 c# asp.net user-controls master-pages placeholder

在我的 ASP.Net 页面中,我有 PlaceHolder 和 Button。当用户单击此按钮时,我将一些 UserControls 从我的接口(interface)方法 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 不会上升。仅网页刷新。我准备了一些答案,但我想不出解决这个问题有多容易。

最佳答案

如果您触发 *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";
    }

关于c# - ASP.NET 动态添加 UserControl 到 PlaceHolder,不触发 Click 事件,只触发 Page_Load,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19301005/

相关文章:

asp.net - 动态地将用户控件添加到转发器

css - ASP.NET MVC 用户控件 - 将特定于控件的 CSS 放在哪里?

c# - 使用 CodeDom.CompilerResults 在运行时生成程序集 (.dll) 时生成 list

c# - 如何配置 WCF 以将 HTTP 与客户端证书一起使用?

c# - 将 VB.net 替换转换为 C#

java - 使用 JAX-WS 使用 ASP.net Web 服务,获取 "The specified type is abstract"

c# - Windows 窗体和 C# 中控件的动态自上而下列表?

c# - Asp.NET MVC 应用程序中的静态类

c# - 插入数据并用新数据刷新数据网格后关闭弹出窗口

c# - 添加类到@Html.ActionLink