2011-09-16 11 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> 

mam tego menu w głównej stronie, kiedy użytkownik loguje się na stronie, na podstawie roli użytkownika Chcę dodać elementy do menu z serwera bok. Jak mogę to zrobić.Dodawanie elementów do menu dynamicznie w witrynie asp.net

Admin (menu, aby dodać -> Organizacja, Wiadomość, grupa) użytkowników (menu można dodać -> Wiadomość, Group)

Ponieważ mam 6 role mam inny element menu dla każdej roli. Jak można to zrobić

Odpowiedz

7

W Page_Load mistrza można sprawdzić, czy użytkownik jest w niektórych ról i dynamicznie dodawać wartości do 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

z tym, to nie będzie ogień zdarzenie menuitemclick na kodzie tyłu – Bachask8

0

można utworzyć sesji podczas logowania użytkownika.

Session["user"] = user; 

Na stronie wzorcowej;

var user = Session["user"]; 
3

Generalnie korzystam z mapy strony i przycinania zabezpieczeń. Każdy atrybut siteMapNode ma atrybut "role", który wskazuje, które role mogą zobaczyć link w menu. * jest używany dla wszystkich ról lub możesz wprowadzić listę ról oddzielonych przecinkami. na przykład

<?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> 

itp

Następnie można włączyć zabezpieczenia przycinanie w Twojej 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> 

Wszystko co musisz zrobić, następnie ustawić źródło danych z menu asp do mapy witryny . Więcej informacji można znaleźć tutaj: http://msdn.microsoft.com/en-us/library/305w735z.aspx i tutaj: http://msdn.microsoft.com/en-us/library/ms178429(v=vs.80).aspx

Lubię to podejście, ponieważ dodanie nowego elementu menu w oparciu rola jest o wiele łatwiejsze. Nie musisz ręcznie sprawdzać roli w kodzie, za którą prawdopodobnie i tak skończy się jako nieporęczna instrukcja if.

0
Privilege

Dynamiczny użytkownika oparty Menu

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> 

      <% }     

     %> 
Powiązane problemy