首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LoadControl vs构造ASP.Net控件

LoadControl vs构造ASP.Net控件
EN

Stack Overflow用户
提问于 2009-08-24 03:56:00
回答 4查看 3.9K关注 0票数 9

我有一个问题,为什么我们只能使用LoadControl添加动态控件。例如:

代码语言:javascript
复制
public partial class wucReportParam : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
          wucDate() ctrl = new wucDate();
          pnl.Controls.Add(ctrl);
    }
}

当在wucDate的page_load方法中时,wucDate的子控件为空,但当我使用以下方法时:

代码语言:javascript
复制
   public partial class wucReportParam : System.Web.UI.UserControl
    {
        public Report Report;

        protected void Page_Load(object sender, EventArgs e)
        {
              ctrl = (wucDate)LoadControl(@"Reports\wucDate.ascx");
              pnl.Controls.Add(ctrl);
        }
    }

在wucDate的page_load方法中,wucDate的子控件不为空。谁能给我解释一下,为什么当我使用构造器时,asp .net不创建wucDate的任何子控件?谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-08-24 04:00:47

动态加载用户控件时,确保标准ASP.NET页事件管道已启动并正常进行是很重要的。当您使用new运算符创建用户控件的实例时,该用户控件未正确添加到ASP.NET的事件系统中。如果事件(初始化、加载、PreRender等)如果不触发,那么您的控件将永远不会正常工作。这就是为什么有必要使用LoadControl,因为这将确保正确创建用户控件的实例并将其附加到ASP.NET。

票数 9
EN

Stack Overflow用户

发布于 2009-09-09 14:47:30

显然,使用带有typeof (或GetType)的LoadControl与使用'new‘(其中子控件未初始化)具有相同的问题。在ASCX文件中使用带有字符串的LoadControl是可行的。

不初始化子控件。

代码语言:javascript
复制
LoadControl(typeof(MyReport), null);

成功了!

代码语言:javascript
复制
LoadControl("Report.ascx");
票数 4
EN

Stack Overflow用户

发布于 2009-10-15 21:01:44

用户控件内控件的初始化由ASCX文件驱动。只使用"new SomeControl“不会导致这个初始化运行,即使它运行了,ascx文件中的所有设计(标记)也会丢失。

请记住,类"wucDate“只是完整用户控件继承自的基类。它与使用LoadControl("wucDate.ascx")时得到的类不同。

老实说,LoadControl与页面生命周期没有太多关系。当您将控件添加到容器的Controls集合中时,将处理该部分。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1320419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档