.NET按名称动态获取控制权

时间:2010-08-18 14:31:41

标签: asp.net reflection dynamic controls

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

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

我想在.NET平台上有一些反射方法允许这样但我不知道哪一个。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

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

相关文档:

编辑我刚刚想到,如果您能够使用代码段中显示的类型转换,那么反射应该是绝对不必要的。如果您能够将变量声明为DropDownList,那么只需简单地包含= new DropDownList();并将其称为“{1}}就更容易了。

编辑2 暂时有一篇帖子可能正确地引导了你的意图。如果您正在寻找已存在的控件,并且您的命名容器(可能是页面,或者可能是数据绑定控件)有句柄,那么您可以使用FindControl方法,然后转换为相关类型。

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

答案 1 :(得分:1)

对于服务器控件:

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");