如何使用反射在运行时创建Web控件的实例?我创建了一系列实现公共接口的控件,我想根据存储在我的数据库中的控件名称创建这些控件。
我尝试(并且失败)使用Activator.CreateInstance以下列方式创建这些控件的实例:
Activator.CreateInstance("MyUserControl")
和
Activator.CreateInstance("ASP","controls_myusercontrol_ascx")
...并且都返回null。
我还尝试通过尝试来简单地获取控件的类型。
Type t = Type.GetType("controls_myusercontrol_ascx");
和
Type t = Type.GetType("MyUserControl");
...并返回null。
如果我将对象显式声明为controls_myusercontrol_ascx或MyUserControl,则没有问题 - 但无法通过反射找到它。
是否可以在运行时使用反射创建Web用户控件?如果是的话,我该怎么办?
答案 0 :(得分:1)
您可以使用LoadControl
或Page
课程中的Control
方法执行此操作。从Visual Studio帮助:
void Page_Init(object sender, System.EventArgs e)
{
// Instantiate the UserControl object
MyControl myControl1 =
(MyControl)LoadControl("TempControl_Samples1.ascx.cs");
PlaceHolder1.Controls.Add(myControl1);
}