2012-02-08 4 views
0

Je veux créer un contrôle serveur comme ce qui suit:
Création de ServerControl imbriqué dans asp.net?

<%@ Register Assembly="MdsAccordionMenu" Namespace="MdsAccordionMenu" TagPrefix="cc1" %> 

<cc1:MdsAccordionMenu ID="MdsAccordionMenu1" runat="server"> 
    <MdsAccordionMenuItem Title="Some Title"> 
     <MdsAccordionMenuItem Text="some text" Link="http://" IconUrl="image.png" /> 
     <MdsAccordionMenuItem Text="some text" Link="http://" IconUrl="image.png" /> 
     <MdsAccordionMenuItem Text="some text" Link="http://" IconUrl="image.png" /> 
     <MdsAccordionMenuItem Text="some text" Link="http://" IconUrl="image.png" /> 
    </MdsAccordionMenuItem> 
</cc1:MdsAccordionMenu> 


J'écrit le code C# suivant, mais il ne fonctionne pas:

MdsAccordionMenu.cs:

namespace MdsAccordionMenu 
{ 
    [ToolboxData("<{0}:MdsAccordionMenu runat=server></{0}:MdsAccordionMenu>")] 
    [ParseChildren(true, "MdsAccordionMenuItems")] 
    [DefaultProperty("MdsAccordionMenuItems")] 
    [Serializable] 
    public class MdsAccordionMenu : WebControl 
    { 
     [Description("سرعت نمایش انیمیشن")] 
     [DefaultValue(500)] 
     public int AnimationSpeed { get; set; } 

     [Browsable(false), PersistenceMode(PersistenceMode.InnerProperty)] 
     public List<MdsAccordionMenuItem> MdsAccordionMenuItems { get; set; } 
    } 
} 


MdsAccordionMenuItem.cs:

namespace MdsAccordionMenu 
{ 
    //[TypeConverter(typeof(ExpandableObjectConverter))] 
    [ParseChildren(true, "MdsAccordionItems")] 
    [DefaultProperty("Title")] 
    [Serializable] 
    public class MdsAccordionMenuItem 
    { 
     [Description("تیتر منو")] 
     [DefaultValue("Title")] 
     [NotifyParentProperty(true)] 
     public string Title { get; set; } 

     [Browsable(false), PersistenceMode(PersistenceMode.InnerProperty)] 
     [NotifyParentProperty(true)] 
     public List<MdsAccordionItem> MdsAccordionItems { get; set; } 
    } 
} 


MdsAccordionItem .cs:

namespace MdsAccordionMenu 
{ 
    [Serializable] 
    public class MdsAccordionItem : INamingContainer 
    { 
     [NotifyParentProperty(true)] 
     [Description("متن")] 
     public string Text { get; set; } 

     [NotifyParentProperty(true)] 
     [Description("آدرس لینک منو")] 
     public string Link { get; set; } 

     [NotifyParentProperty(true)] 
     [Description("آدرس آیکون")] 
     public string ImageUrl { get; set; } 
    } 
} 

Comment puis-je faire?

Répondre

0

je pouvais résoudre le problème

MdsAccordionMenu.cs

[ToolboxData("<{0}:MdsAccordionMenu runat=server></{0}:MdsAccordionMenu>")] 
[ParseChildren(true, "MdsAccordionMenuItems")] 
[DefaultProperty("MdsAccordionMenuItems")] 
[PersistChildren(true)] 
[TypeConverter(typeof(ExpandableObjectConverter))] 
[Serializable] 
public sealed class MdsAccordionMenu : WebControl, INamingContainer 
{ 
    #region Properties 

    public int AnimationSpeed { get; set; } 

    public string InlineStyle { get; set; } 

    [Bindable(true)] 
    [Browsable(false), PersistenceMode(PersistenceMode.InnerProperty)] 
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] 
    public MdsAccordionMenuItemsClass MdsAccordionMenuItems 
    { 
     get { return _mdsAccordionMenuItem ?? new MdsAccordionMenuItemsClass(); } 
     set { _mdsAccordionMenuItem = value; } 
    } 

    private MdsAccordionMenuItemsClass _mdsAccordionMenuItem; 
} 

MdsAccordionMenuItem.cs

[Serializable] 
public class MdsAccordionMenuItemsClass : List<MdsAccordionMenuItem> 
{ 

} 

[ParseChildren(true, "MdsAccordionItems")] 
[PersistChildren(true)] 
[Serializable] 
public class MdsAccordionMenuItem : INamingContainer 
{ 
    public string Title { get; set; } 

    private MdsAccordionItemsClass _mdsAccordionItems; 

    [Browsable(false), PersistenceMode(PersistenceMode.InnerProperty)] 
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] 
    [Bindable(true)] 
    public MdsAccordionItemsClass MdsAccordionItems 
    { 
     get { return _mdsAccordionItems ?? new MdsAccordionItemsClass(); } 
     set { _mdsAccordionItems = value; } 
    } 
} 

MdsAccordionItem.cs

[Serializable] 
public class MdsAccordionItemsClass : List<MdsAccordionItem> 
{ 

} 

[Serializable] 
[ParseChildren(true, "MdsAccordionSubMenuItems")] 
[PersistChildren(true)] 
public class MdsAccordionItem : INamingContainer 
{ 
    public string Text { get; set; } 

    private bool _visible = true; 
    public bool Visible 
    { 
     get { return this._visible; } 
     set { this._visible = value; } 
    } 

    public string Link { get; set; } 

    public string ImageUrl { get; set; } 

    private MdsAccordionItemsClass _mdsAccordionSubMenuItems; 

    [Bindable(true)] 
    [Browsable(false), PersistenceMode(PersistenceMode.InnerProperty)] 
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] 
    public MdsAccordionItemsClass MdsAccordionSubMenuItems 
    { 
     get { return _mdsAccordionSubMenuItems ?? new MdsAccordionItemsClass(); } 
     set { _mdsAccordionSubMenuItems = value; } 
    } 
} 

Maintenant, je peux créer le contrôle en mode concepteur avec le code suivant:

<cc1:MdsAccordionMenu ID="MdsAccordionMenu1" runat="server" EnableViewState="True"> 
    <MdsAccordionMenuItems> 
     <cc1:MdsAccordionMenuItem Title="Submit"> 
      <MdsAccordionItems> 
       <cc1:MdsAccordionItem Text="Item 01" Link="#" ImageUrl="~/style/icons/lightbulb.png" /> 
       <cc1:MdsAccordionItem Text="Item 02" Link="#" ImageUrl="~/style/myImages/question.png" /> 
       <cc1:MdsAccordionItem Text="Item 03" Link="#" ImageUrl="~/style/myImages/request-knowledge.png" /> 
       <cc1:MdsAccordionItem Text="Item 04" Link="#" ImageUrl="~/style/myImages/document.png" /> 
       <cc1:MdsAccordionItem Text="Item 05" Link="#" ImageUrl="~/style/myImages/book.png" /> 
       <cc1:MdsAccordionItem Text="Item 06" Link="#" ImageUrl="~/style/myImages/document1.png" /> 
      </MdsAccordionItems> 
     </cc1:MdsAccordionMenuItem> 
    </MdsAccordionMenuItems> 
</cc1:MdsAccordionMenu> 
0

Selon votre code C#, le balisage devrait être la suivante ...

<cc1:MdsAccordionMenu ID="MdsAccordionMenu1" runat="server"> 
      <MdsAccordionMenuItems> 
       <cc1:MdsAccordionMenuItem Title="hello"> 
        <MdsAccordionItems> 
         <cc1:MdsAccordionItem Text="Text" Link="http://www.google.com" ImageUrl="~/Image.jpg" /> 
        </MdsAccordionItems> 
       </cc1:MdsAccordionMenuItem> 
      </MdsAccordionMenuItems> 
     </cc1:MdsAccordionMenu> 
+0

Je ne veux pas avoir CC1 préfixe dans les sous-contrôles, comment puis-je le faire? –

+0

Vous ne pouvez probablement pas faire quoi que ce soit à propos de cc1 puisque ces contrôles sont utilisés dans l'assembly qui est enregistré comme cc1 –

+0

désolé j'ai mal compris votre question initiale. @ O.Askari a raison. vous ne pouvez rien faire sur le cc1 puisqu'il est là pour éviter toute ambiguïté. – Nandun

Questions connexes