2011-02-07 52 views
8

Sto scrivendo la mia prima aplicazione MVC 3 (in ASP.NET) e non so come posso (dovrebbe) visualizzare il menu per utenti diversi.ASP.NET MVC - menu per diversi ruoli

mia app viene creato come MVC3 Web Application e l'aspetto del menu in questo modo:

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

Ho creato due tipi di ruoli: utente e amministratore. Ora, voglio mostrare altri collegamenti per l'utente (Progetti, Profilo) e per l'amministratore (Gestisci progetti, Gestisci account, Gestisci notizie).

Come dovrei farlo?

+2

Hai guardato a questa domanda: [Costruire un menu ASP.NET MVC pagina master dinamicamente, in base “Ruolo” l'utente corrente del] (http://stackoverflow.com/questions/2203320/building-an-asp-net-mvc-master-page-menu-dinamico-basato-sugli-attuali-utenti), sembra affrontare quasi la stessa domanda che hai E le persone hanno risposto. – R0MANARMY

risposta

7

ho trovato la soluzione:

<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

Non dovresti mettere molta logica condizionale nella tua vista. Se ti ostini a farlo in questo modo, dovresti davvero inserire entrambi questi controlli nella tua azione e aggiungere semplici proprietà booleane al tuo ViewModel. – R0MANARMY

+0

[link] (http://forums.asp.net/t/1903464.aspx?having+5+roles++++++++++++++++++++++++++++++++++++++++++++ti + in + mvc) @ehoog questa logica non dovrebbe essere applicata nella vista, poiché rende il codice della vista molto disordinato e viola i principi di MVC. Questa logica dovrebbe essere nel controller. Vi suggerisco: Creare una classe modello Nell'azione Controller, riempire il modello con i dati per le voci di menu (in base al ruolo). Nella vista, generare il menu utilizzando i dati del menu dal modello. – sosha

Problemi correlati