我正在尝试将模板添加到包含标签和文本框的简化复合控件。我希望我的标记看起来像这样:
<test:FormItem ID="fi" runat="server" Title="MyTitle" Text="My Text!">
<TestTemplate>
<i>
<%# Container.Title) %></i>
<br />
<%# Container.Text %>
</TestTemplate>
</test:FormItem>
我有一个 templateContainer 类,它具有 TextBox 和 Label 的属性。
public class TemplateContainer : WebControl, INamingContainer
{
public TextBox Text { get { return m_item.Text; } }
public Label Title { get { return m_item.Title; } }
private FormItem m_item;
public TemplateContainer(FormItem item)
{
m_item = item;
}
}
在主 FormItem 类中,我有一个从 CreateChildControls() 调用的 CreateControlHierarchy() 方法:
protected virtual void CreateControlHierarchy()
{
m_itemTemplateContainer = new TemplateContainer(this);
TestTemplate.InstantiateIn(m_itemTemplateContainer);
Controls.Add(m_itemTemplateContainer);
}
我想要的是模板呈现实际控制。相反,它在控件上调用 ToString() 并显示 System.Web.UI.WebControls.Label 和 System.Web.UI.WebControls.TextBox。有没有办法让模板将控件添加到它的集合中,而不仅仅是在它们上调用 ToString() ?
注意:我还尝试将文本框和标签添加到执行相同操作的容器的控件集合中。