【问题标题】:Hide or disable asp menu item using Javascript使用 Javascript 隐藏或禁用 asp 菜单项
【发布时间】:2012-09-24 03:29:43
【问题描述】:

我有一个 ASP 菜单,其中包含一些菜单项。见以下代码:

<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu"
    EnableViewState="false" IncludeStyleBlock="false"
    Orientation="Horizontal">
                        <Items>
          <asp:MenuItem NavigateUrl="~/Home.aspx" Text="Home"/>
          <asp:MenuItem NavigateUrl="~/AboutUs.aspx" Text="About"/>
          <asp:MenuItem NavigateUrl="~/Admin.aspx" Text="Admin"/>
          <asp:MenuItem NavigateUrl="~/UserAccount.aspx" Text="User"/> 
                        </Items>
                    </asp:Menu>

我想根据登录会话隐藏或禁用第三个菜单项。我知道如何处理会话,但我不知道如何隐藏一个 asp:menu 项目。我无法将 CSS 应用于单个菜单项。 所以租告诉我该怎么做。

【问题讨论】:

    标签: javascript asp.net-mvc vb.net-2010


    【解决方案1】:

    如果是您想隐藏的管理区域,您可以在页面加载后使用 jquery:

        $('asp:MenutItem[Text="Admin"]').hide();             
    
        //note you will need to replace selector with generated html
        //something like
        $('#NavigationMenu a[title="Admin"]').hide(); 
    

    如果可以的话,最好限制服务器端的列表,这样有限的菜单就固定在那里,如下所示:

            if (!Roles.IsUserInRole("Admin"))
            {
                MenuItemCollection menuItems = NavigationMenu.Items;
                MenuItem adminItem = new MenuItem();
                foreach (MenuItem menuItem in menuItems)
                {
                    if (menuItem.Text == "Admin")
                        adminItem = menuItem;
                }
                menuItems.Remove(adminItem);
            }
    

    【讨论】:

      【解决方案2】:

      为什么要使用javascript?它在 asp.net 框架呈现的 html 上运行,您将无法访问会话。

      这个问题可能是您正在寻找的: Can I hide/show asp:Menu items based on role?

      【讨论】:

        【解决方案3】:

        "如何使用 javascript 隐藏或禁用 asp 菜单项"

        如果您确实需要使用 JavaScript,这里有一些代码可以做到:

        //  Hide one of the top-level ASP.Net menu items
        
        var menuItemToHide = "Rating";
        
        var menuItems = $(".AspNet-Menu-Horizontal > ul > li > a");
        $.each(menuItems, function () {
            var menuText = $(this).text().trim();
            if (menuText == menuItemToHide) {
                $(this).parent().hide();
            }  
        });
        

        (我们有一个 ASP.Net 应用程序,其中用户的角色来自 Active Directory,所以我不能只在 Web.sitemap 或 web.config 中添加一些内容。这段代码使用JQuery 遍历我的 ASP.Net asp:Menu 控件中的顶级菜单项,并删除“评级”菜单。)

        【讨论】:

          猜你喜欢
          • 2011-09-15
          • 1970-01-01
          • 2014-07-09
          • 2014-09-11
          • 2011-11-18
          • 2013-10-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多