使用asp.net显示/隐藏css菜单项取决于用户角色

时间:2012-10-18 14:59:41

标签: asp.net css

我有css布局:一列固定宽度布局,来自maxdesign.com

我有两个菜单项定义如下:

<div id="navigation">
        <ul>
            <li><a href="#">Data Entry</a></li>
            <li><a href="#">Reports</a></li>
        </ul>
    </div>

现在,假设我有两个角色:guestoperator,我想要这样,例如,如果角色为guest的用户已登录,则只需Report菜单中显示1}}项,如果用户operator已登录,则会显示两个选项。

我该如何实现?

修改

根据您的回复,我将使用服务器端逻辑来处理此问题:

<div id="navigation">
        <ul>
            <li><asp:LinkButton ID="lkbDataEntry" runat="server">Data Entry</asp:LinkButton></li>
            <li><asp:LinkButton ID="lkbReports" runat="server">Reports</asp:LinkButton></li>                
        </ul>
    </div>

谢谢!

4 个答案:

答案 0 :(得分:1)

您可以为菜单元素指定ID属性,然后在代码隐藏中使用RegisterClientSideScriptBlock或使用Response.Write将JavaScript发送到客户端以隐藏(或显示)基于某些条件的元素。< / p>

答案 1 :(得分:1)

您可以将其放在Page_Load ..

    Dim cs As ClientScriptManager = Page.ClientScript

    If Not cs.IsClientScriptBlockRegistered(Me.GetType(), "RoleVariable") Then
        Dim js As New String
        js = "var _role = " & role & ";"
        cs.RegisterStartupScript(Me.GetType(), "RoleVariable", js, True)
    End If

从那里开始,您将在Javascript领域担任角色,您可以在其中操纵所需项目的可见性。

因此...

<script type="text/javascript">
    function hideStuff() {
        if (_role === "operator") {
            // hide/show your elements here
        }
        else if (_role === "guest") {
            // hide/show your elements here
        }
    }
</script>

请记住,这种方法都是客户端的,因此,如果真正想要的话,其他开发人员很容易操作。但另一方面,它是最简单的。不要将此方法用于高安全性的情况。

答案 2 :(得分:1)

简单的事情怎么样?

<% if(Page.User.IsInRole("operator") || Page.User.IsInRole("guest")) { %>
<div id="navigation">
        <ul>
            <% if(Page.User.IsInRole("operator")) { %>
            <li><a href="#">Data Entry</a></li>
            <% } %>
            <li><a href="#">Reports</a></li>
        </ul>
    </div>
<% } %>

答案 3 :(得分:0)

我不认为你可以(或应该)使用样式表进行逻辑运算。您可能需要一些javascript,然后根据访客或运营商决定要显示的样式