Выпуск:
Наследование наследует только часть кода вашего пользовательского элемента управления. Разметка не может быть унаследована, так как она динамически компилируется во время выполнения.
Связь между разметкой и вашим выделенным кодом осуществляется через частичный класс .designer.cs, который поставляется с вашим пользовательским элементом управления. Этот дизайнерский файл содержит объявления для всех объектов в вашей разметке. Это в основном украшает класс code-behind с кучей полей, которые являются нулевыми ссылками на объекты - они будут инициализированы с фактическими экземплярами при запуске скомпилированного кода разметки.
Когда вы наследуете из файла .ascx, вы наследуете все эти заполнители пустых объектов. Однако, поскольку разметка в вашем новом элементе управления не совпадает с родительским элементом управления, ни один из этих объектов фактически не создается, если разметка нового элемента управления не содержит соответствующей разметки и когда он анализируется и компилируется, все ссылки остаются ноль. Имеет ли это смысл?
Исправление:
Лучший способ сделать это - сделать ваши пользовательские элементы управления самодостаточными, то есть отдавать предпочтение композиции на основе кода, а не на основе разметки. Другими словами, вместо использования разметки настройте пользовательский элемент управления с помощью Page_Init и добавьте все необходимые элементы управления в коллекцию Controls в коде позади.
Затем, когда вы унаследуете этот класс, будет выполнен все тот же код, гарантирующий, что ваш дочерний usercontrol будет иметь те же элементы управления пользовательского интерфейса.