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

tengo este menú en la página maestra, Cuando el usuario inicia sesión en el sitio web, a partir de la función de usuario que desea agregar elementos al menú desde el servidor lado. Cómo puedo hacer eso.Añadir elementos al menú de forma dinámica en la página web asp.net

Admin (menú para añadir -> Organización, Mensaje, Grupo) Usuarios (menú para añadir -> Mensaje, Grupo)

Ya que tengo 6 papeles que tienen diferente elemento de menú para cada función. ¿Cómo puede hacerse esto

Respuesta

7

En el Page_Load del maestro podrías comprobar si el usuario se encuentra en algunos roles y agrega dinámicamente los valores al menú:

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 esto, hay fuego en el evento menuitemclick código subyacente – Bachask8

0

Se puede crear una sesión cuando la conexión del usuario.

Session["user"] = user; 

En página principal;

var user = Session["user"]; 
3

En general, utilizaría un mapa del sitio y el recorte de seguridad. Cada siteMapNode tiene un atributo de "roles" que indica qué roles tienen permitido ver el enlace en el menú. * se usa para todos los roles o puede ingresar una lista de roles separados por comas. p.ej.

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

etc.

A continuación, puede permitir el recorte de seguridad en su 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> 

Todo lo que tiene que hacer a continuación, se establece el origen de datos de su menú asp al mapa del sitio . Más información se puede encontrar aquí: http://msdn.microsoft.com/en-us/library/305w735z.aspx y aquí: http://msdn.microsoft.com/en-us/library/ms178429(v=vs.80).aspx

Me gusta este enfoque porque es mucho más fácil agregar un nuevo elemento de menú basado en roles. No es necesario que verifique manualmente el rol en el código detrás del cual probablemente terminará siendo una declaración if difícil de manejar.

0
Privilegio

dinámico del usuario Menú basado en

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> 

      <% }     

     %> 
Cuestiones relacionadas