Pergunta Renderizar parte da View MVC3

  • quinta-feira, 12 de abril de 2012 20:34
     
      Contém Código

    Saudações

    tenho essa View:

    <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<IEnumerable<Web.Clinic.Areas.Security.Models.MenuModel>>" %>
    
    <div>
    
    <%
          //MembershipUser user = Membership.GetUser();
    
          //      string[] roles = Roles.GetRolesForUser();
    
          //      List<Web.Clinic.Areas.Security.Models.MenuModel> menus = new Web.Clinic.Areas.Security.BFL.MenuFlow().Render(roles[0], Guid.Parse(user.ProviderUserKey.ToString()), "");
        Html.Telerik().Menu().Name("menu").Orientation(MenuOrientation.Horizontal)
                        .Items(menu =>
                        {
                            foreach (var item in Model)
                            {
                                if(item.Items.Count > 0)
                                {
                                    menu.Add().Text(item.MenuText).Items(subitem =>
                                    {
                                        foreach (var s in item.Items)
                                        {
                                            subitem.Add().Text(s.MenuText).Action(s.ActionName, s.ControllerName);
                                        }
    
                                    });
                                    
                                }
                            }
                        }); 
    
    %>
    </div>


    E chamo assim na MasterPage:

     <% Html.RenderPartial("Render"); %>

    E no controller tenho  a Action Render()

    porém não passa no controller e já lança o erro dizendo que o Model da view é nulo.

    Gostaria de saber porque

    Obrigado


    Desenvolva!!!

Todas as Respostas

  • sexta-feira, 13 de abril de 2012 02:17
    Moderador
     
      Contém Código

    O problema é nessa parte:

    Inherits="System.Web.Mvc.ViewPage<IEnumerable<Web.Clinic.Areas.Security.Models.MenuModel>>

    Se você tem uma View fortemente tipada você deve fornecer um objeto correspondente ao tipo da mesma.

    Para funcionar corretamente você teria que passar algo assim:

    <% Html.RenderPartial("Render", [ListaDoTipo_MenuModel]); %>
    Como você está na MasterPage você pode criar um controller para o menu, recuperar a lista dos itens em uma action e usar "RenderAction" para renderizar seu menu de acordo com os parâmetros necessários


  • sexta-feira, 13 de abril de 2012 09:34
     
     
    Bom dia.
    Eu tenho que passar o nome da action e do controller correto?
    Quanto aos parâmetros, 2 deles pego atraves do membership, mesmo porque o menu é counstruido
    depois do login. Mas tem um que eu tenho que passar de acordo com a area que o usuario estiver.
    Esse parametro deve ser passado como?



    Desenvolva!!!

  • sexta-feira, 13 de abril de 2012 19:19
    Moderador
     
      Contém Código
    @Html.RenderAction([Action], [Controller], object[] RouteValuesDictionary)
    ex:
    @{Html.RenderAction("RenderMenu", "Menu", new { param1 = [param1], param2 = [param21] });}
    Substitua obviamente os nomes dos seu parâmetros e claro, também não use os colchetes.
  • sexta-feira, 13 de abril de 2012 19:40
     
     
    Os parâmetros vão para a Action entao?

    Desenvolva!!!

  • sexta-feira, 13 de abril de 2012 19:49
     
      Contém Código

    Erro

    Compiler Error Message: CS1501: No overload for method 'Write' takes 0 arguments

    Line 30:                     var user = Membership.GetUser(@User.Identity.Name);
    Line 31:                     var roles = Roles.GetRolesForUser(user.UserName);
    Line 32:                     @{Html.RenderAction("Render", "Menu", new { role = roles[0], user = user.ProviderUserKey.ToString(), modulo = "" });}
    Line 33:                 }
    Line 34:             </nav>

    Esse controller fica em  uma area, nesse caso como fazer?


    Desenvolva!!!

  • sexta-feira, 13 de abril de 2012 20:29
    Moderador
     
      Contém Código

    Tire o @ e as {} da chamada do Html.RenderAction:

    Html.RenderAction("Render", "Menu", new { role = roles[0], user = user.ProviderUserKey.ToString(), modulo = "" });

    A sintaxe o razor tem hora que é meio complicada mesmo, depois que se pega o jeito fica fácil.


  • sábado, 14 de abril de 2012 11:00
     
     

    João meu caro. Consegui mas de outra forma.

                

           public ActionResult RenderMenu()
            {
                MembershipUser user = Membership.GetUser();

                string[] roles = Roles.GetRolesForUser();

                List<MenuModel> menus = db.Render(roles[0], Guid.Parse(user.ProviderUserKey.ToString()), "");

                return PartialView(menus);
            }

     

    Master Page

    Html.RenderAction("RenderMenu", "Menu", new {area="Security"});

    Somente assim.

    Agora to tentando alterar a view default.


    Desenvolva!!!

  • segunda-feira, 16 de abril de 2012 11:49
     
     

    Bom dia desculpe entrar assim neste post.

    Rodrigo, que legal que você está usando os componentes Telerik, eu também uso e são muitos show de bola.

    No meu caso em questão eu tenho um view que se chama _Menu.cshtml para chamar ela em outras views eu faco assim:   @Html.Partial("_menu")

    este view está em na pasta Shared , e este parte do projeto está dentro de uma área. (Existem outras áeras)

    Bom estou vendo que você colocou a parte de membership, acredito que é para gerar o menu certo ? Se for isso olhá só o Menu do Telerik não precisa passar o GUID da tabela aspnet_user ou a role do usuário, se você implementar no controller por exemplo

    [Authorize(Roles="Suporte")]

    Public ActionResult Index()

     Se o usuário não for do grupo suporte o Menu do Telerik automaticamente fica invisível , tenta fazer isso   para você ver.

    Att,

    José Luiz


    Isco Sistemas José Luiz Borges

  • quarta-feira, 18 de abril de 2012 00:12
     
     

    Ola José.

    Tbém gosto dos componentes, mas não tive sucesso usando dessa vez. Aí fiz na mão mesmo.

    Mas obrigado pela dica.

    agora estou pelejando com um modal.

    veja esse http://social.msdn.microsoft.com/Forums/pt-BR/mvcpt/thread/2d8949df-0b6e-4580-97e6-7484173d4b6a


    Desenvolva!!!