0

从下面的标记可以看出,有 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,那么我们想隐藏管理员链接。

我没有收到错误,但链接没有被隐藏。

如果禁用链接更容易,我们不介意走那条路。

非常感谢您的帮助。

4

3 回答 3

2

我建议将控件的可见性设置为 false,然后仅在检测到用户为管理员时才显示它。这样,如果出现这样的错误,则不会为所有用户显示该链接。

您可以像这样设置可见性默认值:

<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
于 2013-06-28T16:26:04.410 回答
1

尝试使用:

If Session("UserRole").ToString() = "1" Then
    divAdmin.Visible = True
Else
    divAdmin.Visible = False
End If


对于您的其他问题:

您可以将属性添加到li标签

<li runat="server" id="divAdmin" class="hide">...</li>

其中hide = visibility: hidden使其最初隐藏,然后可以使其Page_Load可见

li.Attributes("class") = "show"

其中show = visibility:在你的 CSS 中可见。

于 2013-06-28T16:17:46.610 回答
1

该变量可能必须转换为 int,因为比较可能是对象或字符串与整数 1 的比较,这不太可能是预期的比较。

爱荷华州:

"1" = 1

很可能会是假的。

于 2013-06-28T16:12:42.473 回答