【问题标题】:How to handle the Click event of a button in a custom ITemplate control?如何处理自定义 ITemplate 控件中按钮的 Click 事件?
【发布时间】:2011-02-28 09:57:02
【问题描述】:

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

[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 控件。

我要做的就是处理按钮的点击事件。当我将事件处理程序分配给按钮控件并运行项目时,它会引发 NullReferenceException。 有没有办法处理这个问题?

【问题讨论】:

  • 似乎没人会回答我的问题。

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


【解决方案1】:

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

您应该在容器的 Load 事件期间执行此操作,并且您将在调用 ITemplate.InstantiateIn 方法后访问模板注入控件。

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

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

【讨论】:

  • 我在 Control 的 Render 方法中调用了 Instantiate() 方法。如果您有示例,请发布:)
【解决方案2】:

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

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

我在 OnInit 中实例化模板并在 OnLoad 中分配点击事件。

我在OnLoad中找到了LinkBut​​ton,没问题。我还能够添加看起来一切正常的 Click 事件,直到当我尝试单击 LinkBut​​ton 时,Click 事件没有触发。

解决方法是让我的自定义控件实现 INamingContainer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    相关资源
    最近更新 更多