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