C# 如何在自定义服务器控件中呈现子标记?
我正在处理一个自定义ServerControl,我创建了它,如下所示:C# 如何在自定义服务器控件中呈现子标记?,c#,asp.net,controls,menu,servercontrols,C#,Asp.net,Controls,Menu,Servercontrols,我正在处理一个自定义ServerControl,我创建了它,如下所示: [ParseChildren(true), PersistChildren(true)] [ToolboxData("<{0}:Menu runat=\"server\"></{0}:Menu>")] public class Menu : WebControl { ..... [DesignerSerializationVisibility(DesignerSerializati
[ParseChildren(true), PersistChildren(true)]
[ToolboxData("<{0}:Menu runat=\"server\"></{0}:Menu>")]
public class Menu : WebControl
{
.....
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
[PersistenceMode(PersistenceMode.InnerDefaultProperty)]
public MenuItem MenuItems { get; set; }
}
[ParseChildren(true), PersistChildren(true)]
public class MenuItem : WebControl
{
......
[PersistenceMode(PersistenceMode.InnerProperty)]
public MenuItem SubMenuItems
{
get
{
if (_SubMenuItems == null) return new MenuItem();
return _SubMenuItems;
}
set
{
_SubMenuItems = value;
}
}
private MenuItem _SubMenuItems;
[TemplateContainer(typeof(MenuItem))]
[PersistenceMode(PersistenceMode.InnerProperty)]
public ITemplate Template { get; set; }
}
改变
到
true
表示希望将子类解析为类的属性/属性,而不是子类。谢谢,关于Template
,我想在Template
中呈现一些控件。我怎么做?啊,我误解了。假设您正在将模板
属性设置为某个新对象,是吗?这是你写的控件吗?如果是这样的话,您能在问题中添加此类型的定义吗?不,我正在使用Template
tag中的标准控件,我想像往常一样呈现它们。但是我想呈现上面的asp.net代码,我的意思是MdsMenu:MenuItem
标记。对,但是您在代码中设置模板属性的是什么?我假设您必须将其设置为某个值才能使…
标记工作。这是我的模板属性:[TemplateContainer(typeof(MenuItem))][PersistenceMode(PersistenceMode.InnerProperty)]公共项目板模板{get;set;}
嘿,你能给我看看你的建筑的其他部分吗?我在做一些类似的东西。我在MenuItem get set的收集部分遇到了问题,在那里你有子项收集
<%@ Register Assembly="JQueryMenu" Namespace="JQueryMenu" TagPrefix="MdsMenu" %>
<MdsMenu:Menu ID="Menu1" runat="server">
<AnimationItems AnimationSpeed="Fast" AnimationType="Opacity_Height" DropShadow="true"
Delay="1000" />
<MdsMenu:MenuItem ID="MenuItem1" runat="server" Text="MenuItem 01">
<MdsMenu:MenuItem runat="server">
<Template>
<asp:Button ID="Button1" runat="server" Text="Button" />
<asp:CheckBox ID="CheckBox1" runat="server" />
</Template>
</MdsMenu:MenuItem>
</MdsMenu:MenuItem>
<MdsMenu:MenuItem ID="MenuItem2" runat="server" Text="MenuItem 01">
<MdsMenu:MenuItem ID="MenuItem3" runat="server">
<Template>
<asp:Button ID="Button2" runat="server" Text="Button" />
<asp:CheckBox ID="CheckBox2" runat="server" />
</Template>
<MdsMenu:MenuItem ID="MenuItem5" runat="server" Text="MenuItem 05">
</MdsMenu:MenuItem>
<MdsMenu:MenuItem ID="MenuItem6" runat="server" Text="MenuItem 06">
</MdsMenu:MenuItem>
<MdsMenu:MenuItem ID="MenuItem4" runat="server">
<Template>
<asp:Image ID="Image1" runat="server" />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</Template>
</MdsMenu:MenuItem>
</MdsMenu:MenuItem>
</MdsMenu:MenuItem>
</MdsMenu:Menu>
public class Menu : WebControl
{
....
public override void RenderControl(HtmlTextWriter output)
{
if (!this.HasControls())
throw new Exception("Controls are empty");
....
}
}
[ParseChildren(true)]
[ParseChildren(false)]