这是导航菜单的样子。完成HTML,CSS并放在母版页中。
现在的想法是根据用户权限显示/隐藏项目和子项目。
例如:用户仅拥有sub2-2和sub3-1等的权限。因此他登录时不应该看到菜单中的其他项目。 完成必要的表和指定角色。不知怎的,我需要将它们应用到菜单中。是否可能。(使用ASP.Net,C#)
ITEM1 ITEM2 ITEM3
SUB2-1 SUB3-1
SUB2-2 SUB3-2
查看asp:Menu控件,但似乎没有li项的'visible'属性。 基本上我正在寻找像对象/控件/方法,...我可以循环,检查每个项目,使其可见或隐藏。请提出最佳方法。
答案 0 :(得分:3)
内置菜单支持用户角色,并根据角色显示/隐藏菜单项。
如果您需要更细粒度的控制,您可以拥有自己的动态站点地图提供程序,它可以执行您想要的任何操作 - 根据任何内容,角色,用户名,位置等显示/隐藏项目。
我在几年前写过博客。
http://www.wiktorzychla.com/2008/04/sitemapresolve-and-dynamic-site-map.html
答案 1 :(得分:1)
在这里查看我的代码......
<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal">
<Items>
<asp:MenuItem NavigateUrl="~/Default.aspx" Text="Change My Password"/>
<asp:MenuItem NavigateUrl="~/ResetPassword.aspx" Text="Reset My Password"/>
<asp:MenuItem Value="AdminOnly" NavigateUrl="~/UpcomingExpirations.aspx" Text="Upcoming Expirations"/>
</Items>
</asp:Menu>
在背后的代码中......
protected void Page_Load(object sender, EventArgs e)
{
if (!IsUserAnAdmin(HttpContext.Current.User.Identity.Name))
{
MenuItem removeitem = NavigationMenu.GetMenuItemByValue("AdminOnly");
NavigationMenu.Items.Remove(removeitem);
}
}
不是将其设置为Visible = false,我只是删除它,如果他们不是管理员。
编辑... 刚刚意识到Menu.GetMenuItemByValue()是我写的扩展方法,所以你没有它!这里是。这非常有用。
/// <summary>
/// Returns the MenuItem in this Menu that has the specified Value (case sensitive)
/// </summary>
/// <param name="menu"></param>
/// <param name="ItemValue"></param>
/// <returns></returns>
public static System.Web.UI.WebControls.MenuItem GetMenuItemByValue(this System.Web.UI.WebControls.Menu menu, string ItemValue)
{
foreach (System.Web.UI.WebControls.MenuItem item in menu.Items)
{
if (item.Value == ItemValue)
{
return item;
}
}
return null;
}