在asp.net中创建自定义模板控件

问题描述:

我想要创建自定义模板控件,它控制模板coluld内部的页面(类似于updatepanel的行为)。所以,更详细地问题。 控制有看起来像:在asp.net中创建自定义模板控件

<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); 
    } 
} 

希望对你意见,建议,链接和建设性的批评))

套用:

[TemplateInstance(TemplateInstance.Single)] 

声明到你想要直接引用控件的模板,那么应该解决这个问题。

+0

谢谢。我看了一下,看来,这就是我一直在寻找的东西。 – DotNetter 2012-01-28 21:53:42