Asp.net 动态加载的用户控件未呈现

Asp.net 动态加载的用户控件未呈现,asp.net,c#-4.0,user-controls,Asp.net,C# 4.0,User Controls,我试图让usercontrol像插件一样工作:从用户的选择动态加载它(使用反射)。单击按钮后,我可以看到UI已经调整,以指示用户控件已经加载,但我无法看到控件本身。我甚至使用了viewstate,但仍然看不到控件 请在下面找到我的代码: protected void Page_Load(object sender, EventArgs e) { //the scenario should be: a user clicking a button and from ther

我试图让usercontrol像插件一样工作:从用户的选择动态加载它(使用反射)。单击按钮后,我可以看到UI已经调整,以指示用户控件已经加载,但我无法看到控件本身。我甚至使用了viewstate,但仍然看不到控件

请在下面找到我的代码:

protected void Page_Load(object sender, EventArgs e)
    {
        //the scenario should be: a user clicking a button and from there, 
        //loads the control just below it, but still in the same page.
        if (Page.IsPostBack)
            LoadUserControl();

        //(a)I also tried to put in a ViewState but still nothing happens.
        //if (ViewState["UserControl"] != null)
        //{
        //    UserControl uc = (UserControl)ViewState["UserControl"];
        //    pnlReportControl.Controls.Add(LoadControl());
        //}

    }

//supposedly done after a button click
private void LoadUserControl()
    {
        enrolmentReports = string.Concat(Server.MapPath("~"), enrolmentDll);

        assembly = Assembly.LoadFrom(enrolmentReports);

        Type type = assembly.GetType("TZEnrollmentReports.EnrollmentUserControl");

        enrolmentMethodInfos = type.GetMethods();

        //also tried this way but also didn't work
        //Page.LoadControl(type, null);

        UserControl uc1 = (UserControl)LoadControl(type, null);

        pnlReportControl.Controls.Add(uc1);

        //(a)
        //ViewState["UserControl"] = uc1;
    }
请帮忙。这只是整个复杂过程的第一步。我还需要从那份报告中得到一个数据集。但我想我要把它留给另一个线程


谢谢大家!

尝试在页面加载方法中替换以下代码

if(Page.IsPostBack)LoadUserControl()的代码

LoadUserControl()

我相信这是由于
加载控件(类型、对象)
的设计,它不会返回您期望的结果

如果您将其更改为使用
LoadControl(“PathFControl”)
,则这应该可以工作


更多信息,请参见本问答。

可以帮助您解决此问题的建议是改变一点方法。通常,在开发可插拔系统时,需要将可插拔性建立在某些接口的基础上。在您的例子中,我将创建一个接口
IPlugin
,该接口定义了一个类似
CreateUI
的方法以及其他一些方法,以某种通用形式在内部检索由自定义控件管理的数据

这样,您将委托插件实现(您的自定义控件)正确创建UserControl并将其返回给调用者(您的页面)的责任。 一旦通过反射加载插件实现(如下所示):

然后,您可以在页面上加载控件:

pnlReportControl.Controls.Add(plugin.CreateUI());

如果您试图调试代码,
uc1
是否正确实例化?它是您希望显示的用户控件吗?实际上是的。当我尝试调试代码时,它会显示我期望的usercontrol以及其中的所有方法。UI甚至会更改以适应用户控件的假定高度。您确定问题不在用户控件本身上吗?也许它不能正确地生成html。您是否尝试过以硬编码的方式(不动态加载)将其加载到页面上,以验证它是否正确显示?我刚刚创建了一个新控件,并在测试时验证了它是否正确呈现。。但是现在它仍然没有出现,甚至没有像以前那样调整UI。非常感谢。在动态合并用户控件之前,我真的应该验证用户控件是否能够很好地自行呈现。他谈到单击按钮后显示控件,因此评估
Page.IsPostBack
是正确的。即使我希望这只是一个过于简单的例子,因为我会在click事件处理程序中完成。。。
pnlReportControl.Controls.Add(plugin.CreateUI());