2012-10-18 26 views
6

目标所有控件:列表在C#ASP.NET项目

我试图创建将权限分配给基于在整个应用程序中的web表单控件角色权限页面。我正在尝试编写将为给定页面创建一个控件字符串的代码。页面名称将作为字符串传入。

以下这篇文章与我正在寻找的内容非常相似,虽然它是为VB.NET中的窗体应用程序编写的。我希望能够在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项目或名称空间,因为在我的情况下,我的当前项目中只有一个名称空间。我发现了很多列举当前表单上的控件的例子,但是没有找到可以在整个网站范围内完成的代码。 我也能列出我的所有Web窗体类: How to get all classes within namespace?

但它似乎并不认为然后你可以去查询那个类被定义在那里的控制 - 如果有人能解决这个问题一块,我想这会让我下一步。

我曾尝试:

  1. 一个是实例化Web窗体本身,然后遍历 控制所有程序。这至少不是我成功的方式,至少我是这么做的。 Webform1 wf = new Webform1();我也尝试 添加一个构造函数和一个方法,然后去循环通过 控件。

  2. 我也尝试通过 激活器实例化webform类。的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. 的最后一个方法,而我试图避免是 手动方法收集在我的应用程序页面的控件( 应该是静态的一次生产)之后,还具有权限页面,管理员在此时将权限分配给 角色。

最后:

任何指点我在能够朝着正确的方向帮助进行动态微调,权限控制,将不胜感激,即使包括在寻找不同的方式来处理权限。

+0

页面是否改变?否则,您应该能够构建一个“静态”列表,即每个页面上已知控件的预编译列表。 – Patrick

+0

在这个时候,我没有看到应用程序动态生成控件。但是,我试图避免在添加新页面和功能时手动维护列表。 – Merch

回答

0

这是CMS的基本架构。

使用Activator.CreateInstance是正确的。但是还有很多其他的东西,比如帖子之间持续的控制状态。

请查看DotNetNuke其中控件是动态加载的。