如果登录的用户不是管理员,我们希望隐藏管理员链接。我的代码不起作用的任何想法?

时间:2013-06-28 16:09:25

标签: asp.net vb.net

正如您从下面的标记中看到的,共有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的管理员,那么我们希望隐藏管理员链接。

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

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

非常感谢您的协助。

3 个答案:

答案 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