使用反射创建Web控件的实例

时间:2010-10-20 20:59:12

标签: c# asp.net reflection

如何使用反射在运行时创建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用户控件?如果是的话,我该怎么办?

1 个答案:

答案 0 :(得分:1)

您可以使用LoadControlPage课程中的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);
}