2013-06-28 33 views
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> 

然后代码上页面加载()事件子:

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

每个页面具有在标记中所示的链接。

其中一个链接是我们管理页面的admin.aspx。

如果用户登录并且他或她的角色不是管理员的角色,那么我们希望隐藏管理员链接。

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

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

非常感谢您的协助。

+0

要么与调试步骤通过,或删除的“如果”语句和刚刚成立divAdmin.Visible =假 - 确保与问题就行了。也许你的if语句不像你认为的那样行为 – FJT

回答

2

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

您可以设置默认visiblilty像这样:

<li runat="server" visible="false" id="divHideThis" >blerg</li> 

尝试这段代码写出来的会话变量,并确保您的UserRole varible设置并具有你所期望的值。

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 
+0

谢谢。 我所需要的只是标记。一切都很好。 – Kenny

1

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

督察:

"1" = 1 

很可能会是假的。

+0

这是VB,我不认为有==操作符。 =扮演这两个角色。 – Kratz

+0

这很奇怪,如果我在IDE中键入==,它会显示一个错误。我当然不是专家,但我认为你链接到的参考页是错误的。 http://msdn.microsoft.com/en-us/library/215yacb6(v=vs.80).aspx – Kratz

+0

@Kratz,你是对的。 VB只需要一个=,而不是== – Kenny

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> 

这里隐藏= visibility:hidden的使其最初隐藏,然后可以用

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

使其在Page_Load可见其中秀=知名度:在你的CSS可见

+0

UserRole是一个整数 – Kenny

+1

因此将其转换为int并查看其是否有效。你是否证明哪一行代码行为不如预期? – FJT

+0

好吧,我现在看起来很愚蠢。请原谅我。 它确实有效。问题是我以管理员身份登录。所以,它自然会是可见的。 我应该问的问题是,我如何使它最初隐藏起来,优先于标记,并以正确的角色变得可见。 我真诚道歉。 – Kenny

相关问题