在ASP.NET中加载嵌套的UserControl

我有一个嵌套控件无法正确加载的问题。 我尝试了各种页面方法,似乎没有任何工作。

编辑:该网站编译并运行良好 – 它只是留下一个空白的屏幕。

基本上我有一个图表的包装器控件,允许我选择数据,绑定和自定义图表与大量的抽象。 我需要另一个包装器控件,因为可能有一组我想要表示的图表。

广义的答案也会很棒。

这就是我所拥有的。 我用填充符替换了我的自定义属性/属性:

Default.aspx的:

   

OuterUserControl.ascx:

   

OuterUserControl.ascx.cs:

 private member variables Att1 Att2 protected void Page_Load(object sender, EventArgs e) { for(int i=0;i<5;i++) { InnerUserControl cuc = new InnerUserControl(id); holder.Controls.Add(cuc); } } 

InnerUserControl.ascx:

   

InnerUserControl.ascx.cs:

 private int id; //private member variables public InnerUserControl(int id) { this.id = id; this.chart = new Chart(); } protected void Page_Load(object sender, EventArgs e) { //Get data for given id //Databind chart //etc.. } 

从后面的代码添加用户控件时,您必须实际加载控件。 您可以通过执行以下操作来执行此操作:

 protected void Page_Load(object sender, EventArgs e) { for(int i=0;i<5;i++) { InnerUserControl cuc = (InnerUserControl)this.Page.LoadControl("InnerUserControl.ascx"); holder.Controls.Add(cuc); } } 

假设它们在同一目录中。 如果没有,请将虚拟路径作为参数放入LoadControl方法。 执行此操作时,您无需在外部控件上具有register语句。 另外,我通常使用代码前端而不是div标签。 但是,我不确定这是否有所作为。 我还建议加载控件OnInit,因为这将确保为用户控件运行生命周期的所有阶段。

祝好运!

你试过添加吗?

 <%@ Reference Control="InnerUserControl.ascx" %> 

到OuterUserControl.ascx

我建议采用不同的方法。 而不是在代码隐藏中实例化控件对象并将其添加到控件集合(我认为您可能需要LoadControl()正确执行并且比page_load更早地将其挂接到页面生命周期中),添加内部控制在OuterUserControl中以声明方式进行。

如果需要添加InnerUserControl 5次(如示例),请在转发器中声明InnerUseControl。 这与id的列表绑定。

 <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="OuterUserControl.ascx.cs" Inherits="Proj.OuterUserControl" EnableViewState="false" %> <%@ Register src="InnerUserControl.ascx" tagname="InnerUserControl" tagprefix="uc1" %>