面板中的按钮未调用父单击事件

本文关键字:调用 单击 事件 按钮 | 更新日期: 2023-09-27 17:56:39

标题并不完全准确,我有一个 Container 控件,其属性为 PanelControlCollection 类型,基本上是PanelControl的集合:

public class PanelControl : System.Web.UI.WebControls.Panel
{
    public string Title { get; set; }
}
public class PanelControlCollection : Collection<PanelControl> {}

我的自定义用户控件:

public partial class FormSlideShow : BaseUserControl
{
    [PersistenceMode(PersistenceMode.InnerProperty)]
    public PanelControlCollection Panels Title { get; set; }
    protected override void Render(HtmlTextWriter writer)
    {
        foreach(var panel in Panels)
        {
            ContentPlaceHolder.Controls.Add(
                new LiteralControl("<fieldset class='step' Title='" + panel.Title + "'>"));
            ContentPlaceHolder.Controls.Add(panel);
            ContentPlaceHolder.Controls.Add(
                new LiteralControl("</fieldset>"));
        }
        base.Render(writer);
    }
}

我希望能够创建自定义控件并在标记中添加页面(默认.aspx中的代码):

<ctrl:FormSlide runat="server" ID="frmSlide">
    <Panels>
        <ctrl:PanelControl runat="server" ID="page1"><asp:Button runat="server" ID="btnTest" OnClick="btnTest_Onclick" /></ctrl:PanelControl>
        <ctrl:PanelControl runat="server" ID="PanelControl1">Page 2</ctrl:PanelControl>
    </Panels>
</ctrl:FormSlide>

我的问题是,如果我想在普通的 aspx 页中承载控件,如何将我的按钮控件 (btnTest) 连接到 default.aspx 代码隐藏中的 OnClick 事件?如果我将普通的面板控件与按钮放在一起,我可以将事件附加到 onclick,但不能使用我的自定义控件。

顺便说一句,这是我默认.aspx的代码,我想运行但不能运行的代码:

protected void btnTest_Onclick(object sender, EventArgs e)
{
    Response.Redirect("http://www.google.com");
}

谢谢。

面板中的按钮未调用父单击事件

尝试移动以下内容:

foreach(var panel in Panels)
{
    ContentPlaceHolder.Controls.Add(
        new LiteralControl("<fieldset class='step' Title='" + panel.Title + "'>"));
    ContentPlaceHolder.Controls.Add(panel);
    ContentPlaceHolder.Controls.Add(
        new LiteralControl("</fieldset>"));
}
base.Render(writer);

进入OnInit而不是Render.我认为Render向 ASP.NET 注册回发事件为时已晚。我能够重现您的问题,然后通过移动该代码来解决它。

当然,base.Render(writer);应该用base.OnInit(e);代替