列出C#ASP.NET项目中的所有控件

时间:2012-10-18 20:25:14

标签: c# asp.net controls

目标:

我正在尝试创建一个权限页面,该页面根据整个应用程序中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?

但似乎你不能再去查询那里定义的控件那个类 - 如果有人能解决这个问题,我想这会让我进入下一步。

我的尝试:

  1. 一个是实例化webform本身,然后循环遍历 以编程方式控制所有。这至少没有成功 我这样做的方式。 Webform1 wf = new Webform1();我也试过了 添加一个构造函数和一个方法然后循环遍历 控件。

  2. 我也试过通过实例化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>";
    

    这也没有成功。它确实编译但我得到一个控制计数为零,当然没有控制。

  3. 我试图避免的最终方法是手动方法 收集我的应用程序页面上的控件(其中 应该在生产中是静态的),然后仍然拥有权限页面,管理员将权限分配给 那时的角色。

  4. 最后:

    任何帮助指出我能够动态微调控件权限的正确方向都将非常受欢迎,即使这包括查看处理权限的不同方式。

1 个答案:

答案 0 :(得分:0)

这是CMS的基本架构。

使用Activator.CreateInstance是正确的轨道。但是还有更多内容,例如帖子之间持久的控制状态。

请查看动态加载控件的DotNetNuke