2011-02-28 58 views
0

我在ASP.NET中创建了一个用于显示弹出消息框的自定义控件。在我的MessageBox类,我有这样一个内容属性作为了Itemplate如下:如何处理自定义ITemplate控件中按钮的Click事件?

[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> 

即使我的内容属性的模板实例设置为单身,我仍然无法访问Button控件。

我想要做的就是处理按钮的单击事件。当我将一个事件处理程序分配给按钮控件并运行该项目时,它会抛出NullReferenceException异常。 有没有办法解决这个问题?

+0

似乎没有人会回答我的问题。 – 2011-03-02 05:33:57

回答

0

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

在容器的Load事件中,你应该这样做,并且在调用ITemplate.InstantiateIn方法后,您将访问模板注入控件。

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

你可以给我们一部分源代码吗?可以很好地看到你在哪里实例化你的控件模板,以及后来的尝试添加Click事件处理程序的地方。

+0

我在我的Control的Render方法中调用了Instantiate()方法。如果你有一个例子,请张贴:) – 2011-02-28 11:48:28

0

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

我想在Itemplate Template属性中找到一个LinkBut​​ton,并为它指定一个Click事件。

我被实例化的模板的OnInit的OnLoad分配click事件。

我发现LinkBut​​ton在OnLoad,没问题。我还能够添加Click事件,这一切似乎都很好,直到当我尝试点击LinkBut​​ton时,Click事件没有被触发。

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