1

私のような何かをできるようにしたいと思います:カスタムサーバーコントロールに内部コントロールを持たせることはできますか?

<ui:Tab Title="A nice title"> 
    <TabTemplate> 
    <asp:Literal runat="server" ID="SetMe">With Text or Something</asp:Literal> 
    </TabTemplate> 
</ui:Tab> 

をも行うことができる:

[ParseChildren(true)] 
public class Node : SiteMapNodeBaseControl, INamingContainer 
{ 
    private ITemplate tabTemplate; 
    [Browsable(false), 
    DefaultValue(null), 
    Description("The tab template."), 
    PersistenceMode(PersistenceMode.InnerProperty), 
    TemplateContainer(typeof(TabTemplate))] 
    public ITemplate TabTemplate 
    { 
     get { return tabTemplate; } 
     set { tabTemplate = value; } 
    } 
    protected override void CreateChildControls() 
    { 
     if (TabTemplate != null) 
     { 
      Controls.Clear(); 
      TabTemplate i = new TabTemplate(); 
      TabTemplate.InstantiateIn(i); 
      Controls.Add(i); 
     } 
    } 
    protected override void Render(HtmlTextWriter writer) 
    { 
     EnsureChildControls(); 
     base.Render(writer); 
    } 
} 


public class TabTemplate : Control, INamingContainer 
{ 
} 

答えて

1

:私は最終的に思い付いた

<ui:Tab Title="A nice title"> 
    <TabTemplate> 
    <asp:DataList runat="server" ID="BindMe"></asp:DataList> 
    </TabTemplate> 
</ui:Tab> 

回答コードParseChildren属性は、コントロールの子をプロパティまたはコントロールとして扱うかどうかを.NETに指示します。あなたの最初の例では、あなたがコントロールとして子供を扱いたいので、第二のために

[ ParseChildren(ChildrenAsProperties = false) ] 

を追加し、あなたは真のChildrenAsProperties =、およびタイプITemplateのTabTemplateプロパティをしたいです。それ以後、いくつかの配管工事がありますが、それはthis MSDN sampleです。しかし、1つのテンプレートだけが必要な場合は、多くの価値を追加しません。

+0

私はこれまでに得たものを貼り付けました。ほぼ...:P – rball

関連する問題