【问题标题】:Child Controls are null when loading User Control programmatically via LoadControl(Type, object[]) overload通过 LoadControl(Type, object[]) 重载以编程方式加载用户控件时,子控件为空
【发布时间】:2010-02-11 00:20:55
【问题描述】:

我正在像这样以编程方式加载用户控件:

        protected void Page_Load(object sender, EventArgs e)
    {
       // LinqDataSource1.TableName = string.Format("{0}s", _table.Context.Mapping.GetMetaType(_type).Name);
       _control = Page.LoadControl(typeof(CatalogoGenerico), new object[] { typeof(CTG_ENT_ENTIDAD) }) as CatalogoGenerico;
       PlaceHolder1.Controls.Add(_control);
    }

使用这个构造函数:

        public CatalogoGenerico(Type type):this()
    {
        _db = new DataClasses1DataContext();
        _type = type;

    }

我的问题是我的用户控件中的所有控件都是空的,我还需要做些什么来加载子控件吗?

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    这是设计使然。 .ascx 文件实际上继承自代码隐藏类,因此 .ascx 是代码隐藏类的派生类型。

    这意味着当您使用 LoadControl(Type, object[]) 方法加载父代码隐藏类时,它会实例化代码隐藏中定义的父类,而不是包含子控件的派生 .ascx 类。

    如果你使用Page.LoadControl(string)重载,它会如你所愿,因为它可以正确找到模板,找到编译好的.ascx类,并加载它。

    另一种方法是使用代码隐藏而不是标记来实例化 .ascx 文件中的所有控件。

    【讨论】:

    • 这对我不起作用。不管我做什么,我都会得到空引用异常。
    • Page.LoadControl 不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    • 2011-02-08
    • 1970-01-01
    • 2013-07-25
    • 2012-01-09
    • 1970-01-01
    相关资源
    最近更新 更多