我有css布局:一列固定宽度布局,来自maxdesign.com
我有两个菜单项定义如下:
<div id="navigation">
<ul>
<li><a href="#">Data Entry</a></li>
<li><a href="#">Reports</a></li>
</ul>
</div>
现在,假设我有两个角色:guest
和operator
,我想要这样,例如,如果角色为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>
谢谢!
答案 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,然后根据访客或运营商决定要显示的样式