我在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。 有办法处理这个问题吗?
答案 0 :(得分:0)
这取决于您何时调用模板实例化。
你应该在容器的Load事件期间这样做,并且在调用ITemplate.InstantiateIn方法之后你就可以访问模板注入的控件。
如果您无权访问该控件,则应该是您正在查看错误的控件层次结构级别。也许你把它藏在错误的地方?
您能给我们一部分源代码吗?可能很高兴看到您实例化控件模板的位置以及稍后尝试添加Click事件处理程序的位置。
答案 1 :(得分:0)
我在我创建的自定义控件中遇到了类似的问题。
我想在Itemplate Template属性中找到一个LinkButton并为其分配Click事件。
我在 OnInit 中实例化模板,并在 OnLoad 中指定点击事件。
我在 OnLoad 中找到了LinkButton,没问题。我还能够添加Click事件,这一切看起来都很好,直到我试图点击LinkButton时,Click事件没有被触发。
对我来说,修复是让我的自定义控件工具 INamingContainer 。