2011-02-07 93 views
8

Estoy escribiendo mi primera aplicación MVC 3 (en ASP.NET) y no sé cómo puedo (debería) mostrar el menú para diferentes usuarios.ASP.NET MVC - menú para diferentes roles

Mi aplicación se crea como aplicación Web MVC3 y el aspecto del menú de esta manera:

<div id="menucontainer"> 
      <ul id="menu"> 
       <li>@Html.ActionLink("Home", "Index", "Home")</li> 
       <li>@Html.ActionLink("Info", "Info", "Home")</li> 
      </ul> 
</div> 

he creado dos tipos de funciones: de usuario y admin. Ahora, quiero mostrar otros enlaces para el usuario (Proyectos, Perfil) y para el administrador (Administrar proyectos, Administrar cuentas, Administrar noticias).

¿Cómo debo hacer eso?

+2

¿Has mirado en esta pregunta: [La construcción de un menú ASP.NET MVC página maestra dinámica, en función “papel” del usuario actual] (http://stackoverflow.com/questions/2203320/building-an-asp-net-mvc-master-page-menu-dynamically-based-on-the-current-users), parece abordar casi la misma pregunta que usted Y las personas han respondido. – R0MANARMY

Respuesta

7

He encontrado la solución:

<div id="menucontainer"> 
      <ul id="menu"> 
       <li>@Html.ActionLink("Home", "Index", "Home")</li> 
       <li>@Html.ActionLink("Info", "Info", "Home")</li> 
       @if (Request.IsAuthenticated && HttpContext.Current.User.IsInRole 
("user")) { 
        <li>Projects link</li> 
        <li>Profile link</li> 
       } 
       @if (Request.IsAuthenticated && HttpContext.Current.User.IsInRole 
("admin")) { 
        <li>Manage Projects link</li> 
        <li>Manage Accounts link</li> 
       } 
      </ul> 
</div> 
+9

No debe poner tanta lógica condicional en su vista. Si insistes en hacerlo de esta manera, deberías poner ambos controles en tu acción y agregar propiedades booleanas simples a tu ViewModel. – R0MANARMY

+0

[link] (http://forums.asp.net/t/1903464.aspx?having+5+roles+and+one+layout+for+all+of+them+with+custom+menu+per+roles + in + mvc) @ehoog esta lógica no debería aplicarse en la vista, ya que hace que el código de vista sea muy desordenado y viola los principios de MVC. Esta lógica debe estar en el controlador. Le sugiero que: Cree una clase de modelo En la acción Controlador, complete el modelo con los datos para los elementos del menú (según la función). En la vista, genere el menú utilizando los datos del menú del modelo. – sosha

Cuestiones relacionadas