Я загружаю пользовательский элемент управления программно как это:
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;
}
Проблема, которую я имею, состоит в том, что все средства управления в моих пользовательских элементах управления являются пустыми, там что-то еще, что я должен сделать для загрузки дочерних элементов управления?
Так задумано. Файл .ascx фактически наследуется от класса code-behind, поэтому .ascx является производным типом класса code-behind.
Это означает, что при загрузке родительского класса code-behind с помощью метода LoadControl(Type, object[])
происходит инстанцирование родительского класса, определенного в code-behind, а не производного класса .ascx, который содержит дочерние элементы управления.
Если вы используете перегрузку Page.LoadControl(string)
, все будет работать так, как вы хотите, поскольку она может правильно найти шаблон, найти скомпилированный класс .ascx и загрузить его.
Другая альтернатива - инстанцировать все элементы управления в вашем .ascx-файле, используя code-behind вместо разметки.