2010-12-02 56 views
2

我有一個帶有gridview的asp.net頁面。我想這樣做,只有當用戶處於某個角色時,纔會顯示gridview中的某些列,也就是說,如果HttpContext.Current.User.IsInRole(XXX)返回true。如何才能將gridview列顯示給特定角色的用戶?

這樣做最簡單的方法是什麼?

我更喜歡一個解決方案,我可以很容易地把它放在我的ASP代碼中,而不是在頁面代碼隱藏中。

回答

2

我在我的一個網站中使用了這種技術。

If Roles.IsUserInRole(Profile.UserName, "This Role") Then 
    productGridview.Columns(2).Visible = False 
End If 

當然,在這種情況下,2代表要隱藏的列的索引。

+1

我做了這樣的事情。但是,我有幾個表中的列(並且每個表中的列是不同的),所以列在每個表中不會具有相同的索引。如果我能以某種方式引用列而不使用像這樣的索引,那將是非常好的。 – 2010-12-03 15:08:00

0

我可以在這裏想一些選擇,雖然有些是黑客多種。您可以:

  1. 將JavaScript變量設置爲HttpContext.Current.User.IsInRole(xxx)函數的結果,然後使用jQuery刪除有問題的控件。我使用`$(「control_type [id $ =]」)選擇器做了類似的事情。
  2. 使用FindControl("ID")函數獲取要隱藏每個網格的控件,並在每個網格上設置Visible = false
  3. 創建兩個單獨的GridView aspx頁面,其中一個包含所有列,另一個包含一組受限制的列。然後,您可以使用<div>標籤作爲佔位符,並根據IsInRole()的結果調用jQuery load()函數(引用相應的aspx頁面)。

如果您自動生成您的列,也許您可​​以將IsInRole()的結果傳遞給您正在使用的類構造函數/函數,並以這種方式隱藏列。