none
menu asp.net usando xml COMO GERAR MAIS DE UM ELEMENTO ROOT RRS feed

  • Pergunta

  • Bom dia senhores !!!

    Estou gerando um menu atraves de um xmldatasoruce  mas a minha dúvida é com gerar mais de um elemento root, como devo montar o xml.
    Abaixo o meu exemplo e como quero q fique.

    o xml é atual e o menu:

    <?xml version="1.0" encoding="utf-8" ?>
    <Home>
      <Menu text="Books" url="MenuFromXml.aspx">
        <SubMenu text="Asp.Net" url="MenuFromXml.aspx"></SubMenu>
        <SubMenu text="Ajax" url="MenuFromXml.aspx"></SubMenu>
        <SubMenu text="MS SQL Server 2005" url="MenuFromXml.aspx"></SubMenu>
        <SubMenu text="JavaScript" url="MenuFromXml.aspx"></SubMenu>
      </Menu>
      <Menu text="Electronics"  url="MenuFromXml.aspx">
        <SubMenu text="Camera" url="MenuFromXml.aspx">
          <SubMenu text="Digital" url="MenuFromXml.aspx">
            <SubMenu text="Canon" url="MenuFromXml.aspx"></SubMenu>
            <SubMenu text="Kodak" url="MenuFromXml.aspx"></SubMenu>
            <SubMenu text="Sony" url="MenuFromXml.aspx"></SubMenu>
            <SubMenu text="Casio" url="MenuFromXml.aspx"></SubMenu>
            <SubMenu text="Fuji" url="MenuFromXml.aspx"></SubMenu>
          </SubMenu>
          <SubMenu text="Film Camera" url="MenuFromXml.aspx"></SubMenu>
        </SubMenu>
        <SubMenu text="DVDs" url="MenuFromXml.aspx">
          <SubMenu text="Comedy" url="MenuFromXml.aspx">
            <SubMenu text="English" url="MenuFromXml.aspx"></SubMenu>
            <SubMenu text="French" url="MenuFromXml.aspx"></SubMenu>
            <SubMenu text="German" url="MenuFromXml.aspx"></SubMenu>
            <SubMenu text="Spanish" url="MenuFromXml.aspx"></SubMenu>
          </SubMenu>
          <SubMenu text="Kids Movies" url="MenuFromXml.aspx"></SubMenu>
          <SubMenu text="Romance Movies" url="MenuFromXml.aspx"></SubMenu>
          <SubMenu text="Action Movies" url="MenuFromXml.aspx"></SubMenu>
        </SubMenu>
      </Menu>
      <Menu text="Contact Us" url="MenuFromXml.aspx"></Menu>
    </Home>
    





    <asp:Menu ID="Menu1" runat="server" DataSourceID="XmlDataSource1" 
    MaximumDynamicDisplayLevels="4" StaticDisplayLevels="1"
    DynamicHorizontalOffset="1" DynamicVerticalOffset="1"> <StaticMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" /> <DynamicHoverStyle BackColor="#990000" Font-Bold="False" ForeColor="White" /> <DynamicMenuStyle BackColor="#FFFBD6" /> <StaticSelectedStyle BackColor="#FFCC66" /> <DynamicSelectedStyle BackColor="#FFCC66" /> <DynamicMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" /> <DataBindings> <asp:MenuItemBinding DataMember="Menu" TextField="text" ValueField="text"
    NavigateUrlField="url" /> <asp:MenuItemBinding DataMember="SubMenu" NavigateUrlField="url" TextField="text" ValueField="text" /> </DataBindings> <StaticHoverStyle BackColor="#990000" Font-Bold="False" ForeColor="White" /> </asp:Menu> 


    E o menu fica assim :  HOME 
                                              BOOKS
                                              ELETRONICS
                                              CONTATOS

    Eu qria criar mais um elemento como o HOME mais não consigo como deveria ficar o xml.


    Agradeço a ajuda de vcs !!!! 



      


    Renato
    terça-feira, 20 de outubro de 2009 13:59

Respostas

  • Você necessariamente precisa utilizar o controle menu do asp.net? Eu costumo montar os menus sempre de forma dinâmica através do código, dessa forma:


    protected void Page_Load(object sender, EventArgs e)
        {
            montarMenuPrincipal();
        }
    
        // * Método para montagem do menu principal
        protected void montarMenuPrincipal()
        {
            int id_site = 0;
    
            if (Session["ID"] != null)
            {
                id_site = Convert.ToInt32(Session["ID"]);
            }
    
            // * Recupera a string de conexão armazenada no arquivo web.config 
            ConnectionStringSettings getString = WebConfigurationManager.ConnectionStrings["conexao"] as ConnectionStringSettings;
            // * Inicia a classe Seção
            Secao secoes = new Secao(getString.ConnectionString);
            // * Retorna as seções cadastradas no banco
            List<Secao> lista = secoes.carregarSecoesPai(id_site, 1, 'S', 6);
    
            string url = string.Empty;
            string blank = string.Empty;
    
            // * Laço para montagem do menu superior
            foreach (Secao secao in lista)
            {
                if (!string.IsNullOrEmpty(secao.URL))
                {
                    url = secao.URL;
                    blank = "target='_blank'";
                }
                else
                {
                    url = "conteudo.aspx?secao=" + secao.ID;
                }
    
                menuInferior.InnerHtml += "<li class='categoria'><a href='" + url + "' " + blank + ">" + secao.Nome + "</a>";
                menuInferior.InnerHtml += montarSubMenu(secao.ID);
                menuInferior.InnerHtml += "</li>";
            }
        }
    
        // * Método para a montagem dos submenus
        protected string montarSubMenu(int id_secao_pai)
        {
            string submenu = string.Empty;
    
            int id_site = 0;
    
            if (Session["ID"] != null)
            {
                id_site = Convert.ToInt32(Session["ID"]);
            }
    
            // * Recupera a string de conexão armazenada no arquivo web.config 
            ConnectionStringSettings getString = WebConfigurationManager.ConnectionStrings["conexao"] as ConnectionStringSettings;
            // * Inicia a classe Seção
            Secao secoes = new Secao(getString.ConnectionString);
            // * Retorna as seções cadastradas no banco
            List<Secao> lista = secoes.carregarSecoesFilhas(id_site, id_secao_pai, 'S', 0);
    
            string url = string.Empty;
            string blank = string.Empty;
    
            // * Verifica se a seção pai possui alguma seção filha
            if (lista.Count > 0)
            {
                submenu = "<ul>";
                // * Laço para montagem do menu superior
                foreach (Secao secao in lista)
                {
                    if (!string.IsNullOrEmpty(secao.URL))
                    {
                        url = secao.URL;
                        blank = "target='_blank'";
                    }
                    else
                    {
                        url = "conteudo.aspx?secao=" + secao.ID;
                    }
    
                    submenu += "<li><a href='" + url + "' " + blank + ">" + secao.Nome + "</a></li>";
                }
                submenu += "</ul>";
            }
    
            return submenu;
        }

    Espero ter podido ajudar.

    []'s

    André Luis. Vida de Desenvolvedor Web é assim mesmo... Cheia de hacks e baixos!
    terça-feira, 20 de outubro de 2009 15:52
  • Oi,

    Temos a questão do sitemap e da forma como vai exibi-lo, como um menu, por exemplo.

    O menu possui a propriedade staticDisplayLevels que por default é 1 (por isso só exibe o home no primeiro nível). Caso você mude o static display levels para 2 o Home aparecerá lado a lado com o 2o nível, como se na verdade houvessem vários roots.

    O objeto sitemapdatasource também possui propriedades para controlar isso em outros objetos de visualização (tal como a treeview).

    Veja um artigo básico sobre o sitemap em http://www.bufaloinfo.com.br/artigos/coluna28.asp

    []'s
    Dennes
    * Treinamento de ASP.NET 3.5 dia 24/10 - Apenas 12x R$ 70,88 - Inscreva-se em http://www.bufaloinfo.com.br/cursos/aspnet2.asp

    * Treinamento de Introdução a OO e Framework .NET c/C# dia  24/10 - Apenas 12 R$ 42,53  Inscreva-se em http://www.bufaloinfo.com.br/cursos/fundamentosOOFramework.asp

    Tel :  (11) 3170-3056  (21)9240-5134  E-Mail: contato arroba bufaloinfo.com.br
    http://www.bufaloinfo.com.br


    Dennes - Se resolveu, classifique a mensagem, por favor - [http://www.bufaloinfo.com.br] NOVO DVD Segurança no ASP.NET : http://www.bufaloinfo.com.br/LearingSeriesSegurancaASPNET2.asp
    • Marcado como Resposta Harley Araujo quinta-feira, 22 de outubro de 2009 09:49
    terça-feira, 20 de outubro de 2009 22:52
  • Fale Renato,

     

    Olha esse link me ajudou bastante para fazer o menu via código:

     

    Acessar o link:

    http://www.eggheadcafe.com/community/aspnet/7/10019983/to-build-a-menu-programma.aspx

     

    Abraço!


    Se a resposta solucionar sua dúvida, favor - Votar como Útil Abraço!
    • Sugerido como Resposta Erysson Souza terça-feira, 20 de outubro de 2009 17:10
    • Marcado como Resposta Harley Araujo quinta-feira, 22 de outubro de 2009 09:48
    terça-feira, 20 de outubro de 2009 15:12
  • Dennes,

    Achei uma outra alternativa, para o elemento raiz o text e url basta deixar vazio q ele não aparece.
    Caso solucionado.
    Obrigado a todos pela atenção.  
    Renato
    • Marcado como Resposta Harley Araujo quinta-feira, 22 de outubro de 2009 09:46
    quarta-feira, 21 de outubro de 2009 16:17

Todas as Respostas

  • Você pode ter mais elementos root, mais o xml pelo que sei fica inválido, é só fazer como você fez no home
    contudo assim mesmo você consegue utilizá-lo

    ex:
    <home>
    ...
    </home>
    <faleconosco>
    ...
    </faleconosco>

    abraço,
    Leonardo B. Moreira - Web Developer .net with asp.net and C# - I know, it is only programming but I like it.
    terça-feira, 20 de outubro de 2009 14:16
  • Fale Renato,

     

    Olha esse link me ajudou bastante para fazer o menu via código:

     

    Acessar o link:

    http://www.eggheadcafe.com/community/aspnet/7/10019983/to-build-a-menu-programma.aspx

     

    Abraço!


    Se a resposta solucionar sua dúvida, favor - Votar como Útil Abraço!
    • Sugerido como Resposta Erysson Souza terça-feira, 20 de outubro de 2009 17:10
    • Marcado como Resposta Harley Araujo quinta-feira, 22 de outubro de 2009 09:48
    terça-feira, 20 de outubro de 2009 15:12
  • Leonardo desta maneira não funciona, da erro,  pois temos q fechar o xml  e se fechar com outra tag volta pro mesmo conceito exemplo:

    isso não funciona da erro
    <home>
     
    </home>
    <faleconosco>
     
    </faleconosco> 


    e se fizer isso vamos ter menu como elemento raiz  e home e fale conosco como sub estranho não. Pois ja passei dias pesquisando e não achei nada, não tem sentido conseguir criar só um elemento raiz.  
    <menu>
              <home>
     
              </home>
              <faleconosco>
     
                </faleconosco> 
    <menu>

    Renato
    terça-feira, 20 de outubro de 2009 15:18
  • Erysson este link foi útil, em cima deste modelo da pra montar o menu usando o xml, fica um pouco trabalhoso mas de momento atende.

    obrigado !


    Renato
    terça-feira, 20 de outubro de 2009 15:31
  • Olá Renato,

    Você poderia criar seu menu da seguinte maneira:

    <menu>
            <home>
                 <submenu1>
                       <submenu2>...</submenu2>
                 </submenu1>
            </home>
            <faleconosco>
                 <submenu1>
                       <submenu2>...</submenu2>
                 </submenu1>        
            </faleconosco>
    </menu>

    Acho que seria a maneira mais simples.



    André Luis. Vida de Desenvolvedor Web é assim mesmo... Cheia de hacks e baixos!
    terça-feira, 20 de outubro de 2009 15:35
  • Olá andré  !  O problema é q quando eu apontar para o meu MENU ele vai criar isso:


    MENU
           HOME
           FALECONOSCO

    Ao invés de criar   HOME >  FALECONOSCO >  o q ocorre q apartir do momento q fechamos o xml o menu pega como raiz o ultimo elemento q fechamos e o resto fica como sub

    Renato
    terça-feira, 20 de outubro de 2009 15:39
  • Você necessariamente precisa utilizar o controle menu do asp.net? Eu costumo montar os menus sempre de forma dinâmica através do código, dessa forma:


    protected void Page_Load(object sender, EventArgs e)
        {
            montarMenuPrincipal();
        }
    
        // * Método para montagem do menu principal
        protected void montarMenuPrincipal()
        {
            int id_site = 0;
    
            if (Session["ID"] != null)
            {
                id_site = Convert.ToInt32(Session["ID"]);
            }
    
            // * Recupera a string de conexão armazenada no arquivo web.config 
            ConnectionStringSettings getString = WebConfigurationManager.ConnectionStrings["conexao"] as ConnectionStringSettings;
            // * Inicia a classe Seção
            Secao secoes = new Secao(getString.ConnectionString);
            // * Retorna as seções cadastradas no banco
            List<Secao> lista = secoes.carregarSecoesPai(id_site, 1, 'S', 6);
    
            string url = string.Empty;
            string blank = string.Empty;
    
            // * Laço para montagem do menu superior
            foreach (Secao secao in lista)
            {
                if (!string.IsNullOrEmpty(secao.URL))
                {
                    url = secao.URL;
                    blank = "target='_blank'";
                }
                else
                {
                    url = "conteudo.aspx?secao=" + secao.ID;
                }
    
                menuInferior.InnerHtml += "<li class='categoria'><a href='" + url + "' " + blank + ">" + secao.Nome + "</a>";
                menuInferior.InnerHtml += montarSubMenu(secao.ID);
                menuInferior.InnerHtml += "</li>";
            }
        }
    
        // * Método para a montagem dos submenus
        protected string montarSubMenu(int id_secao_pai)
        {
            string submenu = string.Empty;
    
            int id_site = 0;
    
            if (Session["ID"] != null)
            {
                id_site = Convert.ToInt32(Session["ID"]);
            }
    
            // * Recupera a string de conexão armazenada no arquivo web.config 
            ConnectionStringSettings getString = WebConfigurationManager.ConnectionStrings["conexao"] as ConnectionStringSettings;
            // * Inicia a classe Seção
            Secao secoes = new Secao(getString.ConnectionString);
            // * Retorna as seções cadastradas no banco
            List<Secao> lista = secoes.carregarSecoesFilhas(id_site, id_secao_pai, 'S', 0);
    
            string url = string.Empty;
            string blank = string.Empty;
    
            // * Verifica se a seção pai possui alguma seção filha
            if (lista.Count > 0)
            {
                submenu = "<ul>";
                // * Laço para montagem do menu superior
                foreach (Secao secao in lista)
                {
                    if (!string.IsNullOrEmpty(secao.URL))
                    {
                        url = secao.URL;
                        blank = "target='_blank'";
                    }
                    else
                    {
                        url = "conteudo.aspx?secao=" + secao.ID;
                    }
    
                    submenu += "<li><a href='" + url + "' " + blank + ">" + secao.Nome + "</a></li>";
                }
                submenu += "</ul>";
            }
    
            return submenu;
        }

    Espero ter podido ajudar.

    []'s

    André Luis. Vida de Desenvolvedor Web é assim mesmo... Cheia de hacks e baixos!
    terça-feira, 20 de outubro de 2009 15:52
  • É andré vou ter q fazer desta forma mesmo, eu qria fazer usando o menu asp.net mas não vai ter jeito  !!!  fiquei chateado com o menu do asp.net uahauh  !!!!  valeu abraços


    Renato
    terça-feira, 20 de outubro de 2009 16:46
  • André como faço para exibir o menu na pagina.aspx eu devo jogar para um label ? 
    Renato
    terça-feira, 20 de outubro de 2009 19:01
  • Oi,

    Temos a questão do sitemap e da forma como vai exibi-lo, como um menu, por exemplo.

    O menu possui a propriedade staticDisplayLevels que por default é 1 (por isso só exibe o home no primeiro nível). Caso você mude o static display levels para 2 o Home aparecerá lado a lado com o 2o nível, como se na verdade houvessem vários roots.

    O objeto sitemapdatasource também possui propriedades para controlar isso em outros objetos de visualização (tal como a treeview).

    Veja um artigo básico sobre o sitemap em http://www.bufaloinfo.com.br/artigos/coluna28.asp

    []'s
    Dennes
    * Treinamento de ASP.NET 3.5 dia 24/10 - Apenas 12x R$ 70,88 - Inscreva-se em http://www.bufaloinfo.com.br/cursos/aspnet2.asp

    * Treinamento de Introdução a OO e Framework .NET c/C# dia  24/10 - Apenas 12 R$ 42,53  Inscreva-se em http://www.bufaloinfo.com.br/cursos/fundamentosOOFramework.asp

    Tel :  (11) 3170-3056  (21)9240-5134  E-Mail: contato arroba bufaloinfo.com.br
    http://www.bufaloinfo.com.br


    Dennes - Se resolveu, classifique a mensagem, por favor - [http://www.bufaloinfo.com.br] NOVO DVD Segurança no ASP.NET : http://www.bufaloinfo.com.br/LearingSeriesSegurancaASPNET2.asp
    • Marcado como Resposta Harley Araujo quinta-feira, 22 de outubro de 2009 09:49
    terça-feira, 20 de outubro de 2009 22:52
  • Olá Renato,

    Para exibir o menu na página crie uma <ul> da seguinte forma:

    <ul id="ulMenuPrincipal" runat="server"></ul>

    e atribua as <li> criadas em código para essa <ul>.

    []'s

    Se a resposta o ajudar marque-a como útil.

    André Luis. Vida de Desenvolvedor Web é assim mesmo... Cheia de hacks e baixos!
    quarta-feira, 21 de outubro de 2009 12:02
  • Dennes muito obrigado, agora funcionou mas tem mais um problema... Como faço para inibir a primeira opção do xml no menu abaixo q seria o root, tem alguma propriedade q da um start ou algo do genero, eu pesquisei mas não achei  ?

    O menu fica assim:

    ROOT | RENATO | TESTE

    Teria q ficar assim


    RENATO | TESTE

    <root>

      <Menu text="RENATO " url="MenuFromXml.aspx">
          <SubMenu text="Kids Movies" url="MenuFromXml.aspx"></SubMenu>
            <SubMenu text="Romance Movies" url="MenuFromXml.aspx"></SubMenu>
          <SubMenu text="Action Movies" url="MenuFromXml.aspx"></SubMenu>
      </Menu>

      <Menu text="TESTE" url="MenuFromXml.aspx">
          <SubMenu text="Kids Movies" url="MenuFromXml.aspx"></SubMenu>
            <SubMenu text="Romance Movies" url="MenuFromXml.aspx"></SubMenu>
          <SubMenu text="Action Movies" url="MenuFromXml.aspx"></SubMenu>
      </Menu>
    <root>
    Renato
    quarta-feira, 21 de outubro de 2009 13:03
  • Fala andré blz !! para aparecer mais de um menu raiz no menu asp.net  basta colocar a opção staticDisplayLevels = 2 assim como o dennes explicou
    Renato
    quarta-feira, 21 de outubro de 2009 13:04
  • Oi,

    Tente a propriedade StartingNodeOffset no sitemapdatasource.

    []'s
    Dennes
    * Treinamento de ASP.NET 3.5 dia 24/10 - Apenas 12x R$ 70,88 - Inscreva-se em http://www.bufaloinfo.com.br/cursos/aspnet2.asp

    * Treinamento de Introdução a OO e Framework .NET c/C# dia  24/10 - Apenas 12 R$ 42,53  Inscreva-se em http://www.bufaloinfo.com.br/cursos/fundamentosOOFramework.asp

    Tel :  (11) 3170-3056  (21)9240-5134  E-Mail: contato arroba bufaloinfo.com.br
    http://www.bufaloinfo.com.br

     


    Dennes - Se resolveu, classifique a mensagem, por favor - [http://www.bufaloinfo.com.br] NOVO DVD Segurança no ASP.NET : http://www.bufaloinfo.com.br/LearingSeriesSegurancaASPNET2.asp
    quarta-feira, 21 de outubro de 2009 13:23
  • Dennes,

    Achei uma outra alternativa, para o elemento raiz o text e url basta deixar vazio q ele não aparece.
    Caso solucionado.
    Obrigado a todos pela atenção.  
    Renato
    • Marcado como Resposta Harley Araujo quinta-feira, 22 de outubro de 2009 09:46
    quarta-feira, 21 de outubro de 2009 16:17