2013-06-28 34 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

相關問題