这是去年我想到的一个非常好的问题..这是我想出的,它有点冗长,但我希望这能有所帮助..
首先,您必须查看 Asp.net 中的 ControlAdapters。
http://www.asp.net/cssadapters/WhitePaper.aspx
概述: 1.为您要根据角色启用和禁用的控件类型创建一个控件适配器。2.在asp.net控件上应用一些属性,指定哪些角色可以访问该控件。
在 asp.net 页面中尝试这样的事情
<asp:TextBox ID="TextBox1" runat="server" CRAN="1"></asp:TextBox>
这里CRAN是我的自定义属性,1是可以在页面上访问此控件的角色 ID 。
现在是时候创建一个控制适配器,它将根据角色启用/禁用此控件。
public class TextBoxAdapter:
System.Web.UI.WebControls.Adapters.WebControlAdapter
{
protected override void OnLoad(EventArgs e)
{
if (this.Page is ISecurable)
{
WebControl tb = this.Control as WebControl;
string roles = tb.Attributes[Constants.ControlRoleAttributeName];
bool result = true;
if (!string.IsNullOrEmpty(roles))
{
result = false;
string[] role = roles.Split(',');
foreach (string r in role)
{
if (Roles.IsUserInRole(r))
{
result = true;
}
}
}
tb.Enabled = result;
//tb.BackColor = Color.Red;
}
base.OnLoad(e);
}
}
这是我创建的控制适配器,它将根据角色启用/禁用控制。您可以修改此显示/隐藏控件。
您必须在 .browser 文件中的 asp.net 的 App_Browser 文件夹中注册此控制适配器
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter controlType ="System.Web.UI.WebControls.TextBox" adapterType="MyProject.ControlAdapter.TextBoxAdapter" />
</controlAdapters>
</browser>
</browsers>
结论:您必须只在元素上应用一个属性才能显示隐藏它们。我已经为 Textbox 创建了适配器,您可以尝试创建一些通用适配器,例如 WebControl/Control。
问候。