使用して、ParseChildrenAttributeとPersistChildrenAttribute属性:
<uc:MyControl runat="server">
<asp:TextBox runat="server" />
<uc:MyControl>
ユーザーコントロールの内容のControlsコレクションの末尾に追加する:
[ParseChildren(false)]
[PersistChildren(true)]
public class MyControl : UserControl { }
これは、あなたが参照の内側に置かれた任意のコントロールが発生します。
ただし、コントロールのコレクションを使用する場合は、おそらくユーザーコントロールではなくサーバーコントロールを使用する必要があります。
<foo:TabControl runat="server">
<Tabs>
<foo:Tab CssClass="myclass" Title="Hello World" />
</Tabs>
</foo:TabControl>
Tabsプロパティを持つControlクラスが必要です。 TabsプロパティはCollectionでなければなりません。 Tab型のオブジェクトを含む必要があります。
[ParseChildren(true, "Tabs")]
public class TabControl: WebControl, INamingContainer
{
private TabCollection _tabs;
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
[PersistenceMode(PersistenceMode.InnerDefaultProperty)]
public TabCollection Tabs
{
get
{
if (_tabs == null)
{
_tabs = new TabCollection();
}
return _tabs;
}
}
protected override void Render(HtmlTextWriter writer)
{
foreach (Tab tab in Tabs)
{
writer.WriteBeginTag("div");
writer.WriteAttribute("class", tab.CssClass);
writer.Write(HtmlTextWriter.TagRightChar);
writer.Write("this is a tab called " + tab.Title);
writer.WriteEndTag("div");
}
}
}
とタブクラス:
public class Tab
{
public string CssClass { get; set; }
public string Title { get; set; }
}
とタブコレクション:
public class TabCollection : Collection<Tab> { }
私はこれを旋風にします。私は今カスタム(サーバー?)コントロールを使用しています。私は "uc"があなたがそれがユーザーコントロールであったと信じさせるかもしれないと思う。 – rball