【问题标题】:.NET Dynamically Get Control By Name.NET 按名称动态获取控制权
【发布时间】:2011-03-31 14:26:15
【问题描述】:

我需要从代表控件名称的字符串创建一个 .NET 控件(在 ASP.NET 中)。

Control myList = SomeSystemClass.GetControlByName("DropDownList");

我猜.NET 平台中有一些反射方法允许这样做,但我不知道是哪一种。有什么想法吗?

【问题讨论】:

  • 如果没有HttpContext,您将无法创建这样的控件。最好解释一下你的场景。
  • 如果是自定义(服务器)控件或用户控件,还要添加。
  • 它是一个 ASP.NET 服务器控件。

标签: asp.net reflection dynamic controls


【解决方案1】:

我认为您需要将Type.GetType() 重载之一与Activator.CreateInstance 结合起来,以创建您所描述的工厂方法。

相关文档:

编辑 我突然想到,如果您能够使用代码 sn-p 中所示的类型转换,则绝对不需要反射。如果您能够将变量声明为DropDownList,那么简单地包含= new DropDownList(); 并称之为good 会容易得多。

编辑 2 有一段时间,有一篇帖子可能正确地理解了你的意图。如果您正在寻找一个已经存在的控件,并且您在其命名容器(可能是页面,也可能是数据绑定控件)上有一个句柄,那么您可以使用以下命令检索该控件FindControl 方法,然后转换为相关类型。

相关文档:http://msdn.microsoft.com/en-us/library/486wc64h.aspx

【讨论】:

    【解决方案2】:

    对于服务器控制:

    Control c = Page.ParseControl("<asp:DropDownList runat='server' />");
    

    或者更具体地为您的示例:

    string ctrlName = "DropDownList";
    Control c = Page.ParseControl("<asp:" + ctrlName  + " runat='server' />");
    

    对于用户控件:

    MyControl myControl1 = (MyControl)LoadControl("TempControl_Samples1.ascx");
    

    【讨论】:

      猜你喜欢
      • 2013-02-22
      • 1970-01-01
      • 2013-11-01
      • 2013-09-16
      • 2014-09-05
      • 2013-08-17
      • 2011-02-20
      • 1970-01-01
      • 2010-12-30
      相关资源
      最近更新 更多