1

我正在尝试创建一个 ascx 控件,它可以像面板一样包装内容。我想做类似的事情 -

<%@ Register TagPrefix="FOO" TagName="Section" Src="CollapsibleSection.ascx" %>
    <Foo:Section runat="server">
        [ Section of asp.net webforms page ]
    </Foo:Section>

自从我完成网络表单以来已经有一段时间了,不记得这是否可行?虽然我可以编写一个完全自定义的控件,但如果可能的话,我的应用程序有很多优点。

4

2 回答 2

6

你需要装饰你的用户控件TemplateContainerAttribute并继承自INamingContainer.

于 2012-06-19T16:50:56.227 回答
3

这称为模板化控件。

这是一个简单的教程,解释了如何在 C# 和 VB.Net 中完成此操作: How to: Create Templated ASP.NET User Controls

引用自 MSDN(上面的链接):

  1. 在 .ascx 文件中,在您希望模板出现的位置添加一个 ASP.NET PlaceHolder 控件。
  2. 在用户控件的代码中,实现 ITemplate 类型的属性。
  3. 将实现 INamingContainer 接口的服务器控件类定义为在其中创建模板实例的容器。这称为模板的命名容器。
  4. 将 TemplateContainerAttribute 应用于实现 ITemplate 的属性,并将模板命名容器的类型作为参数传递给属性的构造函数。
  5. 在控件的 Init 方法中,重复以下步骤一次或多次:
    • 创建命名容器类的实例。
    • 在命名容器中创建模板的实例。
    • 将命名容器实例添加到 PlaceHolder 服务器控件的 Controls 属性。
于 2012-06-19T16:56:02.753 回答