Asp.net 动态加载的用户控件未呈现
我试图让usercontrol像插件一样工作:从用户的选择动态加载它(使用反射)。单击按钮后,我可以看到UI已经调整,以指示用户控件已经加载,但我无法看到控件本身。我甚至使用了viewstate,但仍然看不到控件 请在下面找到我的代码: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
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()如果(!Page.IsPostBack)带有的代码
LoadUserControl()代码>我相信这是由于加载控件(类型、对象)
的设计,它不会返回您期望的结果
如果您将其更改为使用LoadControl(“PathFControl”)
,则这应该可以工作
更多信息,请参见本问答。可以帮助您解决此问题的建议是改变一点方法。通常,在开发可插拔系统时,需要将可插拔性建立在某些接口的基础上。在您的例子中,我将创建一个接口IPlugin
,该接口定义了一个类似CreateUI
的方法以及其他一些方法,以某种通用形式在内部检索由自定义控件管理的数据
这样,您将委托插件实现(您的自定义控件)正确创建UserControl并将其返回给调用者(您的页面)的责任。
一旦通过反射加载插件实现(如下所示):
然后,您可以在页面上加载控件:
pnlReportControl.Controls.Add(plugin.CreateUI());
如果您试图调试代码,uc1
是否正确实例化?它是您希望显示的用户控件吗?实际上是的。当我尝试调试代码时,它会显示我期望的usercontrol以及其中的所有方法。UI甚至会更改以适应用户控件的假定高度。您确定问题不在用户控件本身上吗?也许它不能正确地生成html。您是否尝试过以硬编码的方式(不动态加载)将其加载到页面上,以验证它是否正确显示?我刚刚创建了一个新控件,并在测试时验证了它是否正确呈现。。但是现在它仍然没有出现,甚至没有像以前那样调整UI。非常感谢。在动态合并用户控件之前,我真的应该验证用户控件是否能够很好地自行呈现。他谈到单击按钮后显示控件,因此评估Page.IsPostBack
是正确的。即使我希望这只是一个过于简单的例子,因为我会在click事件处理程序中完成。。。
pnlReportControl.Controls.Add(plugin.CreateUI());