基于角色的启用/禁用asp.net中的控件

前端之家收集整理的这篇文章主要介绍了基于角色的启用/禁用asp.net中的控件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
目前我正在开发一个项目,其中有四个角色的用户可以访问相同的页面(有很多页面,每个页面有近80-90个控件:().

要求是,根据每个角色,用户应该能够查看每个页面中的特定控件(即,一个角色可见的控件不需要对其他角色可见).
它看起来非常简单的功能,我也知道我可以使用后面的代码(例如controlname.visible = false等),但由于有很多页面有许多控件,特定于特定的角色,它变得非常冗长而且可维护性较差的代码.

任何人都可以给我最好的方法,这将是强大的,维护良好的代码.(jQuery,Javascript解决方案也将做..)

解决方法

这是去年点击我心中的一个非常好的问题..这是我提出的,它有点冗长,但我希望这可以帮助..

首先,你必须看看Asp.net中的ControlAdapters.

http://www.asp.net/cssadapters/WhitePaper.aspx

概述:
1.为要根据角色启用和禁用的控件类型创建控件适配器.
2.在asp.net控件上应用一些属性,指定哪些角色可以访问该控件.

在asp.net页面尝试这样的事情

  1. <asp:TextBox ID="TextBox1" runat="server" CRAN="1"></asp:TextBox>

这里CRAN是我的自定义属性,1是可以在页面上访问此控件的roleid.

现在是时候创建一个控制适配器,它将根据角色启用/禁用此控件.

  1. public class TextBoxAdapter:
  2. System.Web.UI.WebControls.Adapters.WebControlAdapter
  3. {
  4.  
  5. protected override void OnLoad(EventArgs e)
  6. {
  7. if (this.Page is ISecurable)
  8. {
  9. WebControl tb = this.Control as WebControl;
  10.  
  11. string roles = tb.Attributes[Constants.ControlRoleAttributeName];
  12. bool result = true;
  13. if (!string.IsNullOrEmpty(roles))
  14. {
  15. result = false;
  16. string[] role = roles.Split(',');
  17. foreach (string r in role)
  18. {
  19. if (Roles.IsUserInRole(r))
  20. {
  21. result = true;
  22. }
  23. }
  24.  
  25. }
  26.  
  27. tb.Enabled = result;
  28. //tb.BackColor = Color.Red;
  29. }
  30. base.OnLoad(e);
  31. }
  32. }

这是我创建的控件适配器,它将根据角色启用/禁用控件.你可以修改这个显示/隐藏控件.

您必须在.browser文件中的asp.net的App_Browser文件夹中注册此控件适配器

  1. <browsers>
  2. <browser refID="Default">
  3. <controlAdapters>
  4.  
  5. <adapter controlType ="System.Web.UI.WebControls.TextBox" adapterType="MyProject.ControlAdapter.TextBoxAdapter" />
  6. </controlAdapters>
  7. </browser>
  8. </browsers>

结论:
您必须仅在元素上应用属性才能显示隐藏它们.我已经为TextBox创建了适配器,您可以尝试创建一些通用适配器,如WebControl / Control.

问候.

猜你在找的asp.Net相关文章