我想创建自定义模板控件,控制模板内部的控件coluld进入页面(类似于updatepanel的行为)。所以,更详细的问题。 控件必须如下所示:
<ec:TabControl runat="server" ID="tab">
<Tabs>
<ec:Tab runat="server">
<TabContainer>
<asp:Button runat="server" Text="aaaaaa" />
</TabContainer>
<TabName>
text or controls
</TabName>
</ec:Tab>
<ec:Tab runat="server">
<TabContainer>
<asp:Button runat="server" Text="vcxvxvxv" />
</TabContainer>
<TabName>
some text
</TabName>
</ec:Tab>
</Tabs>
</ec:TabControl>
当数据绑定控制运行时,它的运行方式很好。换句话说,在ondatabound阶段,内部和模板的所有控件都被适当地实例化。 但我真正想要的是访问内部和直接从页面(通过ID)控件。例如,您可以使用updatepanel(页面范围内的可用内容)来执行此操作。
下面你可以看到控件的源代码片段:
public class Tab
{
[PersistenceMode(PersistenceMode.InnerProperty)]
[TemplateContainer(typeof(HtmlAnchorContainer))]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ITemplate TabName { get; set; }
[PersistenceMode(PersistenceMode.InnerProperty)]
[TemplateContainer(typeof(PanelContainer))]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ITemplate TabContainer { get; set; }
}
public class TabControl : System.Web.UI.WebControls.WebControl
{
List<Tab> tabs;
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
PersistenceMode(PersistenceMode.InnerProperty),
NotifyParentProperty(true)]
public List<Tab> Tabs
{
get { return tabs ?? new List<Tab>(); }
set { tabs = value; }
}
protected override void CreateChildControls()
{
base.CreateChildControls();
.....
foreach (Tab tabItem in Tabs)
{
//generating tree control for further rendering
}
...
}
protected override void OnDataBinding(EventArgs e)
{
EnsureChildControls();
base.OnDataBinding(e);
}
}
希望您提供建议,建议,链接和建设性批评。))
答案 0 :(得分:0)
申请:
[TemplateInstance(TemplateInstance.Single)]
声明你想要直接引用控件的模板,然后解决这个问题。