Почему мои пользовательские элементы управления не отображаются? - PullRequest
0 голосов
/ 26 сентября 2011

Я создал набор пользовательских элементов управления в vb.net, и в их оригинальном проекте они отлично работают.

С тех пор я создал библиотеку пользовательских элементов управления dll и хочу использовать ее в новомproject.

Я добавляю ссылку на dll штраф, указываю библиотеку тегов на странице asp.net и определяю элементы управления на странице штраф.

Кажется, все работает, кроме как я не получаю

Вызываются различные свойства элементов управления и методы page_load.

Трассировка Asp.net показывает элементы управления в иерархии страниц и т. д.

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

Обновление 1

Я только что сравнил след рабочего вывода по сравнению с нерабочим.

Рабочий вывод содержит пользовательские элементы управления(и все элементы в них) В нерабочем выводе перечислены только пользовательские элементы управления - без содержимого

Поэтому кажется, что содержимое элементов управления каким-то образом отсутствует - как будто разметка небудучи скомпилированным с codebehind, кажется, что работает только codebehind.

Update 2

Элементы управления наследуются от UserControl, а не control.

Ответы [ 2 ]

1 голос
/ 26 сентября 2011

Вы правы в своем обобщении в обновлении 1 - ваша разметка не была включена!

Вам нужно немного смазать локтем, если вы пытаетесь распределить элементы управления .ascx в .dll, но, к счастью, не слишком.

Две основные вещи, которые вам нужно сделать:

  1. Встроенные элементы управления .ascx. Элементы управления .ascx должны быть помечены как встроенные ресурсы в вашем .dll (в отличие от 'content')
  2. Создать VirtualPathProvider .Это позволит вам загружать файлы ascx непосредственно из DLL, в которую они встроены.

К сожалению, объяснение шага 2 немного длинно, однако эта отличная статья помогла мне в этом.именно то, что вы хотите сделать.

Прелесть распределения элементов управления .ascx в том, что вам не нужно вырывать волосы при написании пользовательских элементов управления (рендеринг чего-либо, кроме очень простого html, является кошмаром для понимания).

1 голос
/ 26 сентября 2011

Я предполагаю, что вы не путаете пользовательский элемент управления (.ascx) и пользовательские элементы управления.Для работы пользовательских элементов управления требуется как ascx (файл разметки), так и соответствующий класс code-behind.Пользовательский элемент управления обычно состоит из составляющих дочерних элементов управления, иерархия которых указана в файле ascx, который предоставляет некоторый пользовательский интерфейс.В проекте библиотеки классов (dll) вы не можете упаковать файлы ascx - все, что вы получите, это класс с выделенным кодом.Без ascx класс code-behind не будет иметь дочерних элементов управления и, следовательно, будет отображаться пустым.Короче говоря, вы не можете упаковать пользовательские элементы управления (ascx) в библиотеку классов - вы должны добавить их в свой реальный веб-проект.

Для общего управления необходимо использовать пользовательские элементы управления.Пользовательские элементы управления доступны только для кода и обычно обеспечивают переопределение рендеринга, которое выдает необходимый html (или динамически создает собственное дочернее дерево элементов управления).Эти элементы управления могут быть упакованы как библиотека классов и совместно использоваться в проекте.Как правило, пользовательский элемент управления также имеет другие вспомогательные классы для обеспечения помощи во время разработки (редакторы пользовательского интерфейса и т. Д.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...