目标:
我正在尝试创建一个权限页面,该页面根据整个应用程序中webforms中的控件为角色分配权限。我正在尝试编写将为给定页面创建一系列控件的代码。页面名称将作为字符串传递。
以下这篇文章与我正在寻找的内容非常相似,尽管它是为VB.NET中的Windows窗体应用程序编写的。我希望在C#中找到一个适用于webforms的解决方案。 http://www.dreamincode.net/forums/topic/222439-list-of-all-controls-in-project-vbnet/
下一篇文章似乎也是我正在寻找的但是文件中查找的建议不起作用,因为我希望代码更通用并扩展,因为我将页面或控件添加到表单而不是硬 - 编码: Get List of Controls on each WebForm in an Assembly
一般理念:
我的想法是让用户从下拉列表中选择一个角色。然后,用户将从下拉列表中选择应用程序中的页面。然后,SelectedIndexChanged将查询所选页面的webform类,并生成一个网格,列出该页面上控件的名称以及可以分配的另一个权限下拉列表。当用户完成控件和权限的编辑后,他们会单击“保存”,信息将保存到数据库中。
当表单经过身份验证的用户加载页面时,该页面将查询数据库以获取每个控件的权限,并根据用户的角色和权限分配给该控件的只读,编辑或不可见状态。我的最终目标是让最终用户管理员能够管理应用程序中的权限,而不是拥有广泛的角色和权限集,或者必须根据客户的需求进行自定义的一次性工作。请注意,这将是我尝试访问其他页面上的控件的唯一页面。
我正在尝试列出ASP.NET项目或命名空间中的所有控件,因为在我的情况下,当前项目中只有一个命名空间。我找到了大量列出当前表单控件的示例,但没有找到任何可以在站点范围内执行此操作的代码。 我也能够列出我拥有的所有webform类: How to get all classes within namespace?
但似乎你不能再去查询那里定义的控件那个类 - 如果有人能解决这个问题,我想这会让我进入下一步。
我的尝试:
一个是实例化webform本身,然后循环遍历 以编程方式控制所有。这至少没有成功 我这样做的方式。 Webform1 wf = new Webform1();我也试过了 添加一个构造函数和一个方法然后循环遍历 控件。
我也试过通过实例化webform类 Activator.CreateInstance我尝试按照此页面上的示例操作: Instantiate an object with a runtime-determined type
示例:
Page o = (Page)System.Activator.CreateInstance(Type.GetType(pageName));
foreach (Control c in o.Controls)
lblMessages.Text = lblMessages.Text + c.ClientID.ToString() + "<BR>";
这也没有成功。它确实编译但我得到一个控制计数为零,当然没有控制。
我试图避免的最终方法是手动方法 收集我的应用程序页面上的控件(其中 应该在生产中是静态的),然后仍然拥有权限页面,管理员将权限分配给 那时的角色。
最后:
任何帮助指出我能够动态微调控件权限的正确方向都将非常受欢迎,即使这包括查看处理权限的不同方式。
答案 0 :(得分:0)