我正在尝试创建一个可以像面板一样包装内容的ascx控件。我正在做类似的事情 -
<%@ Register TagPrefix="FOO" TagName="Section" Src="CollapsibleSection.ascx" %>
<Foo:Section runat="server">
[ Section of asp.net webforms page ]
</Foo:Section>
已经有一段时间了,因为我已经完成了网络表单并且不记得是否可以这样做?虽然我可以编写一个完全自定义的控件,但如果可能的话,我的应用程序有很多优点。
答案 0 :(得分:6)
您需要使用TemplateContainerAttribute
修饰用户控件,并从INamingContainer
继承。
答案 1 :(得分:3)
这被称为模板控制。
这是一个简单的教程,解释了如何在C#和VB.Net中完成:How to: Create Templated ASP.NET User Controls
引自MSDN(上面的链接):
- 在.ascx文件中,添加要在其中显示模板的ASP.NET PlaceHolder控件。
- 在用户控件的代码中,实现ITemplate类型的属性。
- 定义一个服务器控件类,该类实现INamingContainer接口作为容器,在该容器中创建一个实例 模板。这称为模板的命名容器。
- 将TemplateContainerAttribute应用于实现ITemplate的属性并传递模板命名的类型 container作为属性构造函数的参数。
- 在控件的Init方法中,重复以下步骤一次或多次:
醇>
- 创建命名容器类的实例。
- 在命名容器中创建模板的实例。
- 将命名容器实例添加到PlaceHolder服务器控件的Controls属性中。