如何才能将gridview列显示给特定角色的用户?

问题描述:

我有一个带有gridview的asp.net页面。我想这样做,只有当用户处于某个角色时,才会显示gridview中的某些列,也就是说,如果HttpContext.Current.User.IsInRole(XXX)返回true。如何才能将gridview列显示给特定角色的用户?

这样做最简单的方法是什么?

我更喜欢一个解决方案,我可以很容易地把它放在我的ASP代码中,而不是在页面代码隐藏中。

我在我的一个网站中使用了这种技术。

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

当然,在这种情况下,2代表要隐藏的列的索引。

+1

我做了这样的事情。但是,我有几个表中的列(并且每个表中的列是不同的),所以列在每个表中不会具有相同的索引。如果我能以某种方式引用列而不使用像这样的索引,那将是非常好的。 – 2010-12-03 15:08:00

我可以在这里想一些选择,虽然有些是黑客多种。您可以:

  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()的结果传递给您正在使用的类构造函数/函数,并以这种方式隐藏列。