如何处理自定义模板控件中按钮的Click事件?

时间:2011-02-28 09:57:03

标签: c# asp.net webforms custom-controls

我在ASP.NET中创建了一个自定义控件,用于显示弹出消息框。在我的MessageBox类中,我有一个Content属性,如ITemplate,如下所示:

[PersistenceMode(PersistenceMode.InnerProperty)]
    [TemplateContainer(typeof(MessageBoxContent))]
    [TemplateInstance(TemplateInstance.Single)]
    public ITemplate Content { get; set; }

我在我的页面中使用了我的自定义控件,如下所示:

<cc1:MessageBox ID="MessageBox1" runat="server">
    <Content>
        <asp:Button Text="Save" runat="server" ID="B_Save" />
    </Content>
</cc1:MessageBox>

即使我将Content属性的TemplateInstance设置为Single,我仍然无法访问Button控件。

我想要做的就是处理按钮的click事件。当我将事件处理程序分配给按钮控件并运行项目时,它会抛出NullReferenceException。 有办法处理这个问题吗?

2 个答案:

答案 0 :(得分:0)

这取决于您何时调用模板实例化。

你应该在容器的Load事件期间这样做,并且在调用ITemplate.InstantiateIn方法之后你就可以访问模板注入的控件。

如果您无权访问该控件,则应该是您正在查看错误的控件层次结构级别。也许你把它藏在错误的地方?

您能给我们一部分源代码吗?可能很高兴看到您实例化控件模板的位置以及稍后尝试添加Click事件处理程序的位置。

答案 1 :(得分:0)

我在我创建的自定义控件中遇到了类似的问题。

我想在Itemplate Template属性中找到一个LinkBut​​ton并为其分配Click事件。

我在 OnInit 中实例化模板,并在 OnLoad 中指定点击事件。

我在 OnLoad 中找到了LinkBut​​ton,没问题。我还能够添加Click事件,这一切看起来都很好,直到我试图点击LinkBut​​ton时,Click事件没有被触发。

对我来说,修复是让我的自定义控件工具 INamingContainer