Дочерние элементы управления являются пустыми при загрузке Пользовательского элемента управления программно через LoadControl (Тип, объект []) перегрузка

Я загружаю пользовательский элемент управления программно как это:

        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;

    }

Проблема, которую я имею, состоит в том, что все средства управления в моих пользовательских элементах управления являются пустыми, там что-то еще, что я должен сделать для загрузки дочерних элементов управления?

8
задан Mikhail 20 March 2015 в 17:17
поделиться

1 ответ

Так задумано. Файл .ascx фактически наследуется от класса code-behind, поэтому .ascx является производным типом класса code-behind.

Это означает, что при загрузке родительского класса code-behind с помощью метода LoadControl(Type, object[]) происходит инстанцирование родительского класса, определенного в code-behind, а не производного класса .ascx, который содержит дочерние элементы управления.

Если вы используете перегрузку Page.LoadControl(string), все будет работать так, как вы хотите, поскольку она может правильно найти шаблон, найти скомпилированный класс .ascx и загрузить его.

Другая альтернатива - инстанцировать все элементы управления в вашем .ascx-файле, используя code-behind вместо разметки.

17
ответ дан 5 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: