2010-11-17 55 views
1

我在定製ServerControl工作,我已經創造了它象下面這樣:
如何在自定義服務器控件中呈現子標記?

[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; } 
} 

<%@ 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> 

現在,我該如何分析它,並使它在RenderContent方法? ! 以下方法總是拋出第一個異常,這意味着this.Controls始終爲空!
我該怎麼做,以及如何在RenderControl方法中訪問嵌套子項?

public class Menu : WebControl 
{ 
    .... 

    public override void RenderControl(HtmlTextWriter output) 
    { 
     if (!this.HasControls()) 
      throw new Exception("Controls are empty"); 
     .... 
    } 
} 
+0

嘿,你能告訴我你的建築物的其餘部分我做了類似的事情我有MenuItem的集合部分的麻煩設置你有子條目集合的地方 – ONYX 2011-04-16 23:18:18

回答

2

變化

[ParseChildren(true)] 

[ParseChildren(false)] 

true表示要孩子被解析爲您的類的屬性/屬性,而不是孩子。

+0

謝謝,怎麼樣'Template',我想渲染一些控制' Template'。我該怎麼做 ? – 2010-11-17 05:21:35

+0

啊,我誤解了。想必你將'Template'屬性設置爲一些新對象,是嗎?這是你寫的控件嗎?如果是這樣,你可以添加這種類型的定義到你的問題嗎? – cdhowie 2010-11-17 15:33:23

+0

不,我在'Template'標籤內使用標準控件,我想像往常一樣渲染它們。但我想渲染上面的asp.net代碼,我的意思是'MdsMenu:MenuItem'標籤。 – 2010-11-18 13:03:13

相關問題