1

我有 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显示菜单中的项目,如果用户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

4 回答 4

1

您可以为菜单元素提供一个 ID 属性,然后在代码隐藏中使用RegisterClientSideScriptBlock或使用Response.Write将 JavaScript 发送到客户端以根据某些条件隐藏(或显示)元素。

于 2012-10-18T15:07:19.937 回答
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>

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

于 2012-10-18T15:10:15.830 回答
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>
<% } %>
于 2012-10-18T15:14:46.783 回答
0

我不是 100% 认为您可以(或应该)使用样式表进行逻辑操作。您可能需要一些 javascript,然后根据来宾或操作员决定显示哪种样式

于 2012-10-18T15:08:25.300 回答