在所有examples of Templated server controls中,包含模板的类继承自CompositeControl
类,该类本身继承自WebControl
类。
在我的应用程序中,我想要use Templates in my Control,但也要从不同的类继承,该类不会从CompositeControl
或WebControl
继承。
"模板"可能意味着一大堆事情,但我问这样的代码:
[
Browsable(false),
DefaultValue(null),
Description("The Template for the content of the Control"),
PersistenceMode(PersistenceMode.InnerProperty),
TemplateInstance(TemplateInstance.Single),
]
public ITemplate Content { get; set; }
和这样的ASP.NET代码:
<prefix:CustomControl ID="Control1" runat="server">
<Content>
<asp:Literal ID="ExampleContent" runat="server" Text="Look at me" />
</Content>
</prefix:CustomControl>
但是,我注意到当我从WebControl
类继承时,我对象中的ITemplate
变量具有我期望的数据,而如果我不继承WebControl
1}},这些变量有NULL
个数据。
如何使用模板变量,还可以从我选择的任何类继承?
答案 0 :(得分:0)
当然,你必须继承Control
类,但神奇的是ParseChildren
属性。要使用模板变量,您必须将ParseChildren
属性设置为true
。
[ParseChildren(true)] // Don't treat tags within the Control as properties, but as Controls
public class CustomControl : Control
{
// ...
}
我在检查WebControl
班级和reading more about the attribute后找到了这个。
ParseChildren
属性指定如何解释ASP.NET代码,内部对象是否代表Controls(ParseChildren(false)
)或Properties(ParseChilren(true)
)。由于您的Template变量实际上是属性,因此您必须将ParseChildren
属性设置为true
。不幸的是,这也意味着您无法在ASP.NET代码中混合模板化和非模板化控件,如下所示:
<prefix:CustomControl ID="Control1" runat="server">
<Content>
<asp:Literal ID="ExampleContent" runat="server" Text="Look at me" />
</Content>
<asp:Literal ID="ControlNonTemplate" runat="server" Text="This will not work (Parser error)" />
</prefix:CustomControl>