Frage

Ich möchte in der Lage sein zu tun, so etwas wie:

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

, aber auch in der Lage sein zu tun:

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

Antwort Code kam ich schließlich nach oben mit:

[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
{
}
War es hilfreich?

Lösung

Das ParseChildren Attribut sagt .NET, ob Ihr Steuer Kinder als Objekte oder als Kontrollen zu behandeln. Für Ihr erstes Beispiel mögen Sie Kinder als Kontrollen behandeln, so fügen

[ ParseChildren(ChildrenAsProperties = false) ]

Für die zweite, möchten Sie ChildrenAsProperties = true, und eine TabTemplate Eigenschaft des Typs ITemplate. Es gibt einige Sanitär danach beteiligt, die diese MSDN Probe beschreibt. Es braucht nicht viel Wert hinzufügen, wenn Sie nur eine Vorlage benötigen, though.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top