在asp.net网站中动态添加项目到菜单

时间:2011-09-16 16:37:06

标签: c# asp.net menu uinavigationbar

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

我在母版页中有这个菜单,当用户登录网站时,根据用户角色我想从服务器端向菜单添加项目。我怎么能这样做。

管理员(要添加的菜单 - &gt;组织,消息,组) 用户(要添加的菜单 - &gt;消息,组)

由于我有6个角色,因此每个角色都有不同的菜单项。怎么做呢

4 个答案:

答案 0 :(得分:7)

在主人的Page_Load中,您可以检查用户是否处于某些角色并动态地向菜单添加值:

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

答案 1 :(得分:3)

我通常使用站点地图和安全修整。每个siteMapNode都有一个“roles”属性,指示允许哪些角色在菜单中查看链接。 *用于所有角色,或者您可以输入以逗号分隔的角色列表。 e.g。

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

然后,您可以在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>

然后,您只需将asp菜单的数据源设置为站点地图即可。可以在此处找到更多信息:http://msdn.microsoft.com/en-us/library/305w735z.aspx和此处:http://msdn.microsoft.com/en-us/library/ms178429(v=vs.80).aspx

我喜欢这种方法,因为添加基于角色的新菜单项要容易得多。您不必手动检查后面的代码中的角色,这可能最终会成为一个笨拙的if语句。

答案 2 :(得分:0)

您可以在用户登录时创建会话。

Session["user"] = user;

在母版页中;

var user = Session["user"];

答案 3 :(得分:0)

基于动态用户权限的菜单

 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>

            <% }                

        %>