如何才能将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代表要隐藏的列的索引。
答
我可以在这里想一些选择,虽然有些是黑客多种。您可以:
- 将JavaScript变量设置为
HttpContext.Current.User.IsInRole(xxx)
函数的结果,然后使用jQuery删除有问题的控件。我使用`$(“control_type [id $ =]”)选择器做了类似的事情。 - 使用
FindControl("ID")
函数获取要隐藏每个网格的控件,并在每个网格上设置Visible = false
。 - 创建两个单独的GridView aspx页面,其中一个包含所有列,另一个包含一组受限制的列。然后,您可以使用
<div>
标签作为占位符,并根据IsInRole()的结果调用jQuery load()函数(引用相应的aspx页面)。
如果您自动生成您的列,也许您可以将IsInRole()的结果传递给您正在使用的类构造函数/函数,并以这种方式隐藏列。
我做了这样的事情。但是,我有几个表中的列(并且每个表中的列是不同的),所以列在每个表中不会具有相同的索引。如果我能以某种方式引用列而不使用像这样的索引,那将是非常好的。 – 2010-12-03 15:08:00