【发布时间】:2012-10-09 09:53:57
【问题描述】:
目标:
我正在尝试创建一个权限页面,该页面根据整个应用程序中的网络表单中的控件为角色分配权限。我正在尝试编写为给定页面创建一串控件的代码。页面名称将作为字符串传入。
下面的这篇文章与我正在寻找的内容非常相似,尽管它是为 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 项目或命名空间中的所有控件,因为在我的情况下,我当前的项目中只有一个命名空间。我发现很多示例列出了当前表单上的控件,但没有找到任何可以在站点范围内执行此操作的代码。 我还能够列出我拥有的所有网络表单类: How to get all classes within namespace?
但您似乎无法去查询该类以获取在那里定义的控件 - 如果有人可以解决这个问题,我认为这将使我进入下一步。
我尝试过的:
一个是实例化 web 表单本身,然后循环遍历 以编程方式控制所有内容。这至少不成功 我这样做的方式。 Webform1 wf = new Webform1();我也试过 添加一个构造函数和一个方法,然后遍历 控制。
-
我还尝试通过 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>";这也不成功。它确实编译了,但我会得到一个零控制计数,当然没有控制。
我试图避免的最后一种方法是手动方法 收集我的应用程序页面上的控件(其中 应该在生产中是静态的)然后仍然拥有权限页面并且管理员将权限分配给 那时的角色。
最后:
任何帮助我指出能够动态微调控件权限的正确方向将不胜感激,即使这包括查看处理权限的不同方式。
【问题讨论】:
-
页面有变化吗?否则,您应该能够构建一个“静态”列表,即每个页面上已知控件的预编译列表..
-
此时,我没有看到应用程序动态地动态生成控件。但是,我试图避免在添加新页面和功能时手动维护列表。