我需要从表示控件名称的字符串创建.NET控件(在ASP.NET中)。
Control myList = SomeSystemClass.GetControlByName("DropDownList");
我想在.NET平台上有一些反射方法允许这样但我不知道哪一个。有什么想法吗?
答案 0 :(得分:1)
我认为您需要将Type.GetType()
重载中的一个与Activator.CreateInstance
结合起来,以创建您描述的工厂方法。
相关文档:
编辑我刚刚想到,如果您能够使用代码段中显示的类型转换,那么反射应该是绝对不必要的。如果您能够将变量声明为DropDownList
,那么只需简单地包含= new DropDownList();
并将其称为“{1}}就更容易了。
编辑2 暂时有一篇帖子可能正确地引导了你的意图。如果您正在寻找已存在的控件,并且您的命名容器(可能是页面,或者可能是数据绑定控件)有句柄,那么您可以使用FindControl
方法,然后转换为相关类型。
答案 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");