none
Menu dinâmico master page MVC 3 RRS feed

  • Pergunta

  • Olá pessoal,

     

    Estou criando um projeto para a faculdade com MVC 3. Neste projeto preciso ter um menu com as categorias de produtos e quando o usuário clicar em uma das opções devem ser exibidas as imagens dos produtos desta categoria. As categorias e os produtos estão cadastrados no banco de dados.

     

    Acredito que tenho que colocar este menu na Master Page, pois ele deve ser exibido em todas as minhas páginas. Não encontrei nenhum exemplo de como posso fazer a consulta ao Controller de categorias, a partir da Master.

     

    Alguém pode me ajudar?

     

    Agradeço

    sexta-feira, 18 de novembro de 2011 22:53

Respostas

  • Irisvanda, o namespace não parece estar correto, chegou a verificar? Uma coisa que me chamou a atenção foi o tipo que foi definido como model, sua classe Model tem o mesmo nome de seu Controller (HomePrincipal)?

    Disponibilizei um exemplo de como criar um menu reutilizável a partir do link abaixo, acredito que vai te ajudar no que você precisa, de uma conferida, se tiver duvidas na implementação poste novamente logo abaixo.

    [https://gist.github.com/1380185]

    (Se a resposta ajudou, marque como útil)
    • Editado Wilian NS domingo, 20 de novembro de 2011 11:49 .
    • Marcado como Resposta Irisvanda domingo, 20 de novembro de 2011 16:43
    domingo, 20 de novembro de 2011 11:48

Todas as Respostas

  • Ola Irisvanda, para que o menu apareça em todas as páginas o mesmo pode ser adicionado a Master, em relação a consulta ao Controller de categorias, você pode adicionar normalmente os links da mesma maneira que faria dentro das páginas, atenção apenas para que seja informado o Controller correto, no caso Categorias.

    Exemplo:

     

    <%:Html.ActionLink("categoria x", "ProdutosPorCategoria", "Categorias", new { categoria = "alguma_categoria" }, null)%> 
    

     

     Veja, o segundo parâmetro será o nome de sua action e o terceiro o nome do controller, em seguida poderá ser passado o parâmetro que identificará por exemplo qual a categoria deve ter os produtos listados, no exemplo ficou como categoria.


    (Se a resposta ajudou, marque como útil)

    • Editado Wilian NS sábado, 19 de novembro de 2011 11:43 .
    sábado, 19 de novembro de 2011 11:40
  • Olá Wiliam,

     

    Muito obrigada por ter respondido.

     

    Tentei fazer da forma como você me sugeriu, mas ocorreram erros na execução do projeto.

     

    Adicionei o comando abaixo na minha master para que ela conseguisse visualisar o Controller:

    Inherits="System.Web.Mvc.ViewMasterPage<IEnumerable<TrocaOnline.HomePrincipal>>"

     

    Para a escrita do menu adicionei o seguinte código:

    <div id="menucontainer">
                    <ul id="menu">
                        <% foreach (var item in Model) { %>
                            <li><%:Html.ActionLink(item.descricao, "Listar", "HomePrincipal", new { id = item.id }, null)%></li>    
                        <% } %>
                    </ul>
    </div>

     

    Quando tento executar é exibido o seguinte erro:

     

    Compilation Error

    Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

    Compiler Error Message: CS0234: The type or namespace name 'HomePrincipal' does not exist in the namespace 'TrocaOnline' (are you missing an assembly reference?)

    Source Error:

    Line 176:    
    Line 177:    [System.Runtime.CompilerServices.CompilerGlobalScopeAttribute()]
    Line 178:    public class views_shared_anonimo_master : System.Web.Mvc.ViewMasterPage<IEnumerable<TrocaOnline.HomePrincipal>> {
    Line 179:        
    Line 180:        

    Irisvanda Cunha
    Irisvanda Cunha
    domingo, 20 de novembro de 2011 00:19
  • Irisvanda, o namespace não parece estar correto, chegou a verificar? Uma coisa que me chamou a atenção foi o tipo que foi definido como model, sua classe Model tem o mesmo nome de seu Controller (HomePrincipal)?

    Disponibilizei um exemplo de como criar um menu reutilizável a partir do link abaixo, acredito que vai te ajudar no que você precisa, de uma conferida, se tiver duvidas na implementação poste novamente logo abaixo.

    [https://gist.github.com/1380185]

    (Se a resposta ajudou, marque como útil)
    • Editado Wilian NS domingo, 20 de novembro de 2011 11:49 .
    • Marcado como Resposta Irisvanda domingo, 20 de novembro de 2011 16:43
    domingo, 20 de novembro de 2011 11:48
  • Olá Wiliam,

     

    O exemplo foi perfeito, consegui resolver o problema.

     

    Obrigada!!!!


    Irisvanda Cunha
    domingo, 20 de novembro de 2011 16:43
  • Irisvanda, o namespace não parece estar correto, chegou a verificar? Uma coisa que me chamou a atenção foi o tipo que foi definido como model, sua classe Model tem o mesmo nome de seu Controller (HomePrincipal)?

    Disponibilizei um exemplo de como criar um menu reutilizável a partir do link abaixo, acredito que vai te ajudar no que você precisa, de uma conferida, se tiver duvidas na implementação poste novamente logo abaixo.

    [https://gist.github.com/1380185]

    (Se a resposta ajudou, marque como útil)

    Boa tarde Wilian,

    Estou tentando aprender ASP.NET MVC, estou construindo uma aplicação que monta o menu de acordo com o perfil do usuário, ou seja, monta o menu após o login pegando as informações do cadastro de módulos, mas ainda não consegui evoluir.

    Vc tem algum exemplo com essa idéia que possa me ajudar?

    Agradeço a atenção dispensada.

    sábado, 7 de abril de 2012 19:57
  • Olá Fabio, não tenho um exemplo em mãos para lhe passar, mas o que você poderia fazer é criar uma action restrita a usuários autenticados, e que retorne do banco de dados uma lista de items que corresponda as telas do módulo que usuário tem acesso. A partir deste ponto você pode invocar uma action que retorne uma partialview para montar o html de seu menu.

    Algo mais ou menos assim: 

    public ActionResult MenuPorUsuario(string perfil, string modulo) {
      //acesso ao BD, e recuperação dos dados necessário -> MenuViewModel { string Url; string Descricao; }
      IEnumerable<MenuViewModel> model = _usuariosPerfil.AcessoPorPerfil(perfil, modulo);
    
      return PartialView(model);
    }

    //sua partialview (Foi utilizado Razor mas pode ser adaptado para ASPX)

    @model System.Collections.Generic.IEnumerable<SeuNamespace.MenuViewModel>
    
    <ul id="menu">
    @foreach(var item in @Model)
    {
      <li><a href="@Model.Url">@Model.Descricao</a></li>
    }
    </ul>

    //Em sua página

    @Html.Action("MenuPorUsuario", new { perfil ="[perfil do usuario logado]", modulo = "[modulo em questão]" })

    É uma dica, qualquer duvida poste ai


    (Se a resposta ajudou, marque como útil)



    • Editado Wilian NS terça-feira, 10 de abril de 2012 10:48 typo
    segunda-feira, 9 de abril de 2012 11:33