正如您从下面的标记中看到的,共有5页。
<ul>
<li><a href='Default.aspx'>Home</a></li>
<li><a href='vidpresentations.aspx'>Training Materials</a></li>
<li><a href='myAccount.aspx'>My Account</a></li>
<li class='selected'><a href='trainingPage.aspx'>Training Page</a></li>
<li runat="server" id="divAdmin"><span><a href='admin.aspx'>Administration</a></span></li>
</ul>
然后在pageload()事件子代码后面编写代码:
If Session("UserRole") = 1 Then
divAdmin.Visible = True
Else
divAdmin.Visible = False
End If
每个页面都有标记中显示的链接。
其中一个链接是admin.aspx,用于我们的管理页面。
如果用户登录并且他或她的角色不是1的管理员,那么我们希望隐藏管理员链接。
我没有收到错误,但链接没有被隐藏。
如果更容易禁用链接,我们不介意走那条路。
非常感谢您的协助。
答案 0 :(得分:2)
我建议将控件的可见性设置为false,然后仅在用户被检测为管理员时才显示它。这样,如果出现这样的错误,则不会为所有用户显示链接。
您可以像这样设置visiblilty默认值:
<li runat="server" visible="false" id="divHideThis" >blerg</li>
尝试使用这段代码来写出会话变量,并确保UserRole
变量已设置并具有您期望的值。
For i As Integer = 0 To Session.Contents.Count - 1
Response.Write(Session.Keys(i) + " - " + Session(i) + "<br />")
Next
For Each key As String In Session.Keys
Response.Write(key + " - " + Session(key) + "<br />")
Next
答案 1 :(得分:1)
变量可能必须转换为int,因为比较可能是对象或字符串到整数1,这可能不是预期的比较。
IOW:
"1" = 1
很可能是假的。
答案 2 :(得分:1)
尝试使用:
If Session("UserRole").ToString() = "1" Then
divAdmin.Visible = True
Else
divAdmin.Visible = False
End If
对于您的其他问题:
您可以将 class 属性添加到li
代码
<li runat="server" id="divAdmin" class="hide">...</li>
其中 hide = visibility:hidden 以使其最初隐藏,然后可以在Page_Load
处显示
li.Attributes("class") = "show"
你的css中 show = visibility:visible 。