2011-09-16 6 views
7
<asp:Menu ID="mnu" runat="server" PathSeparator="," CssClass="menu" DynamicMenuItemStyle-CssClass="menu"> 
    <Items> 
     <asp:MenuItem Text="home" NavigateUrl="~/Default.aspx" /> 
     <asp:MenuItem Text="Aboutus" NavigateUrl="#"/> 
     <asp:MenuItem Text="Support" NavigateUrl="#" /> 


    </Items> 
</asp:Menu> 

ho questo menu nella pagina master, quando l'utente accede al sito web, in base al ruolo utente Vorrei aggiungere elementi al menu dal server lato. Come lo posso fare.Aggiungere elementi al menu in modo dinamico nel sito web asp.net

Admin (menu per aggiungere -> Organizzazione, Messaggio, Gruppo) Utenti (menu per aggiungere -> Message, Gruppo)

Da quando ho 6 ruoli non ho voce di menu diverso per ogni ruolo. Come può questo essere fatto

risposta

7

Nel Page_Load del master potreste controllare se l'utente è in alcuni ruoli e aggiungere dinamicamente i valori al menu:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (User.IsInRole("admin")) 
    { 
     mnu.Items.Add(new MenuItem 
     { 
      Text = "Administer web site", 
      NavigateUrl = "~/admin.aspx" 
     }); 
    } 
} 
+0

con questo, non sarà il fuoco della manifestazione menuitemclick sul codice dietro – Bachask8

0

è possibile creare una sessione quando il login utente.

Session["user"] = user; 

In Pagina master;

var user = Session["user"]; 
3

Generalmente utilizzerei una mappa del sito e un sistema di sicurezza. Ogni SiteMapNode ha un attributo "ruoli" che indica quali ruoli sono autorizzati a vedere il link nel menu. * è utilizzato per tutti i ruoli oppure è possibile inserire un elenco di ruoli separati da virgole. per esempio.

<?xml version="1.0" encoding="utf-8" ?> 
<siteMap> 
    <siteMapNode title="Home" description="Home" 
     url="~/default.aspx" roles="*" > 
    </siteMapNode> 
    <siteMapNode title="Organization" description="Organization" 
     url="~/Organization.aspx" roles="Admin" > 
    </siteMapNode> 
    <siteMapNode title="Message" description="Message" 
     url="~/Organization.aspx" roles="Admin, User" > 
    </siteMapNode> 
</siteMap> 

ecc

Poi si può attivare per motivi di sicurezza nel web.config:

<siteMap defaultProvider="XmlSiteMapProvider" enabled="true"> 
    <providers> 
    <add name="XmlSiteMapProvider" 
     description="Default Site Map Provider" 
     type="System.Web.XmlSiteMapProvider" 
     siteMapFile="Web.sitemap" 
     securityTrimmingEnabled="true" /> 
    </providers> 
</siteMap> 

Tutto quello che dovete fare, allora viene impostato l'origine dati del menu asp alla mappa del sito . Ulteriori informazioni possono essere trovate qui: http://msdn.microsoft.com/en-us/library/305w735z.aspx e qui: http://msdn.microsoft.com/en-us/library/ms178429(v=vs.80).aspx

Mi piace questo approccio perché aggiungere una nuova voce di menu basata sui ruoli è molto più semplice. Non è necessario controllare manualmente il ruolo nel codice dietro il quale probabilmente si presenterà comunque come una pesante istruzione if.

0
Privilege

dinamica User Menu basato

C# CLASS FILES 
     public class url_details 
     { 
      public string url; 
      public string page_name; 
      public string icon; 
     } 

     C# inside login page    
     List<url_details> url_list = new List<url_details>();    
     foreach (DataRow dr in dataTable.Rows) 
     { 
      url_details url_item = new url_details(); 
      url_item.url = dr["url"].ToString(); 
      url_item.page_name = dr["page_name"].ToString(); 
      url_item.icon = dr["icon"].ToString(); 
      url_list.Add(url_item); 
     }   
     Session["urls"] = url_list; 


     C#-HTML MENU FORM 
     <% 
      var uruls = (List<url_details>)Session["urls"]; 
      foreach (var url in uruls) 
      {%> 
       <li><a href="..<%=url.url %>"><%=url.icon %><span><%=url.page_name %></span></a></li> 

      <% }     

     %> 
Problemi correlati