2012-01-28 11 views
0

テンプレート内でコントロールするカスタムテンプレートコントロールを作成したいのですが、これはページに入れるべきです(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> 

それが邪魔にうまく機能: コントロールが見えるように持っています。言い換えると、オンデマンド段階では、内部のすべてのコントロールとテンプレートが適切にインスパイアされます。 しかし、私が望むのは、(IDで)ページ内のコントロールに直接アクセスすることです。たとえば、updatepanel(ページスコープ内で使用可能なコンテンツ)を使用して実行できます。

あなたがコントロールのソースコードの断片を見ることができます下:あなたのアドバイス、勧告、リンクや建設的な批判))

答えて

0

ため

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

関連する問題