1

J'ai essayé de créer un contrôle serveur. J'ai essayé d'obtenir mon MenuItem contenir d'autres MenuItems sous Neath comme ceSous-éléments pour le contrôle du serveur

<cc1:DynamicMenu ID="DynamicMenu1" runat="server"> 
    <MenuItems> 
     <cc1:MenuItem Text="" Url=""> 
      <cc1:MenuItem Text="" Url=""> 
       <cc1:MenuItem Text="" Url=""></cc1:MenuItem> 
      </cc1:MenuItem> 
      <cc1:MenuItem Text="" Url=""> 
       <cc1:MenuItem Text="" Url=""></cc1:MenuItem> 
      </cc1:MenuItem>     
     </cc1:MenuItem> 
    </MenuItems> 
</cc1:DynamicMenu> 

mais mon code ne me donne que ce

<cc1:DynamicMenu ID="DynamicMenu1" runat="server"> 
    <MenuItems> 
     <cc1:MenuItem Text="" Url="">No other child elements for MenuItem</cc1:MenuItem> 
    </MenuItems> 
</cc1:DynamicMenu> 

J'ai joué avec ParseChildren et PersistChildren swaping là des valeurs à partir de vrai ou faux et je suis à court d'idées pourrait quelqu'un s'il vous plaît aidez-moi avec pour résoudre mon problème ci-dessous est mon code.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.ComponentModel; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Security.Permissions; 
using System.Collections; 

namespace Gravity.Controls 
{ 
[AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)] 
[AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)] 
[ParseChildren(true), PersistChildren(true)] 
[ToolboxData("<{0}:DynamicMenu runat=\"server\"></{0}:DynamicMenu>")]  
public class DynamicMenu : WebControl 
{ 
    public DynamicMenu() 
    { 

    } 

    List<MenuItem> _menuItems; 
    [PersistenceMode(PersistenceMode.InnerProperty)]   
    public List<MenuItem> MenuItems 
    { 
     get 
     { 
      if(_menuItems == null) 
       _menuItems = new List<MenuItem>(); 
      return _menuItems; 
     } 
    } 
} 

[ParseChildren(false), PersistChildren(true)]  
public class MenuItem: INamingContainer 
{ 
    private string _text; 
    private string _url; 

    public MenuItem(string text, string url) 
    { 

    } 
    public MenuItem() 
     : this("", "") 
    { 

    } 

    public string Text 
    { 
     get 
     { 
      return _text; 
     } 
     set 
     { 
      _text = value; 
     } 
    } 

    public string Url 
    { 
     get 
     { 
      return _url; 
     } 
     set 
     { 
      _url = value; 
     } 
    } 

    private List<MenuItem> _subMenuItems;  
    public List<MenuItem> SubMenuItems 
    { 
     get 
     { 
      if (_subMenuItems == null) 
       _subMenuItems = new List<MenuItem>(); 
      return _subMenuItems; 
     } 
    } 
} 
} 
+0

Avez-vous savoir comment le faire? J'ai le même problème, mais aucune des deux réponses n'a aidé. – daniatic

Répondre

1

Vous devez ajouter dynamiquement une instance de votre contrôle personnalisé pour lui-même en cas OnItemDataBound. Cela réapparaîtra jusqu'à ce que votre condition de logique applicative soit rencontrée (c'est-à-dire: pas d'enfants, donc n'ajoutez pas d'autre contrôle) dans OnItemDataBound.

+0

Pouvez-vous éditer mon code et donnez-moi un exemple de ce qu'il devrait faire parce que je ne sais pas de quoi vous parlez – ONYX

+0

Vous ne trouvez rien sur Internet en ce qui concerne les méthodes dans lesquelles vous avez suggéré que je devrais prendre – ONYX

1

Je pense que vous devriez utiliser ces attribs:

[ParseChildren(true), PersistChildren(false)] 
public class DynamicMenu 

et

[ParseChildren(typeof(MenuItem), DefaultProperty = "SubMenuItems", ChildrenAsProperties = true)] 
public class MenuItem 
Questions connexes