Библиотека классов ASP.NET UserControl

Можно ли создавать библиотеки классов, содержащие UserControls, чтобы я мог их повторно использовать? Если да, то как? Разметка скомпилирована с .dll? Спасибо за любую помощь!

Ответ 1

Обновление: Я был прав, указав на использование предварительно скомпилированного пользовательского элемента управления, как и пользовательский элемент управления.

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

В проекте нет необходимости использовать любые .ascx файлы, в которых вы его будете использовать, поэтому это соответствует именно тому, что вы искали.


Пользовательские элементы управления не предназначены для повторного использования на разных сайтах, вместо этого используйте настраиваемые элементы управления сервером.

Вы можете скомпилировать элементы управления сервером с помощью существующих элементов управления и настроить все, чтобы вы могли стилизовать через css.

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

<%@ Register TagPrefix="aspSample" Namespace="Samples.AspNet.CS.Controls"%>
...
<aspSample:WelcomeLabel Text="Hello" NameForAnonymousUser="Guest" 
   ID="WelcomeLabel1" runat="server" BackColor="Wheat" ForeColor="SaddleBrown" />

Ps. если это не сработает, ссылка, которую он предоставил, указывает, что вы все равно копируете файлы ascx, так что это не будет то, что вы искали i.e.try выше, а если не придерживаться настраиваемых элементов управления сервером.

Ответ 2

Вы можете скомпилировать как UserControl, так и Page в библиотеках классов, потому что в конечном итоге это происходит после того, как ваш веб-сайт как раз вовремя скомпилировано. Этот процесс немного связан с тем, что действительно UserControl и Page не предназначены для использования в приложениях.

Из MSDN:

Пользователь UserControl предоставляет вам возможность создавать элементы управления, которые могут использоваться в нескольких местах в приложении или организации.

http://msdn.microsoft.com/en-us/library/system.windows.forms.usercontrol.aspx

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

Если вы действительно хотите придерживаться UserControl, но базовый процесс для получения этой функции выглядит следующим образом:

  • Создайте новый проект веб-приложений.
  • Разработайте повторно используемые UserControl s.
  • Публикуйте сайт как не обновляемый * сайт. (снимите флажок Разрешить обновление этого сайта)
  • Скопируйте скомпилированную библиотеку из каталога bin и файлов ascx по мере необходимости с опубликованного сайта на новый сайт.

    • Опция un-updatable - это то, что приносит разметку в сборку. Это важный шаг.

Да, как указано в пункте 4, вам нужно скопировать файлы ascx. Разметка будет содержаться в библиотеке классов, а ascx будет пустым. Невозможно избежать этого (если вы не используете настраиваемые элементы управления веб-сервером), поскольку UserControl добавляются в Page через свои имена файлов.

Все это описано более подробно в MSDN,

http://msdn.microsoft.com/en-us/library/aa479564.aspx

Ответ 3

Вместо этого вы, скорее всего, захотите изучить Server Controls. AFAIK вы не можете скомпилировать User Controls в одну DLL.

Ответ 4

Если мы говорим о веб-формах, ответ - нет. Разметка (содержимое файла .ascx) не скомпилирована в dll. Механизм ASP.NET ожидает найти этот файл в файловой системе вместе с веб-приложением. Таким образом, невозможно создать DLL, которую вы можете просто перераспределить или поделиться.

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

Лично я думаю, что это очень раздражает, что так оно и есть.

Я думаю, однако, что если вы используете ASP.NET MVC, есть некоторые возможности (в зависимости от вашего механизма просмотра), но у меня нет большого опыта работы с MVC.

Ответ 5

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

Если ваши элементы управления представляют собой комбинацию других элементов управления сервером (например, текстовое поле и кнопка управления датой), вы можете посмотреть CompositeDataBoundControl и CompositeControl - это удобные способы работы с такими вещами.

Остерегайтесь, однако, что очень легко запутаться в том, как работает повторная гидратация страницы /viewstate. Я потерял много времени на этом, из-за тонких недоразумений о том, как он должен работать.

http://aspnetresources.com/blog/composite_databound_control.aspx

Ответ 6

Вы можете обслуживать элементы управления пользователя из dll. Вам просто нужно создать пользовательский VirtualPathProvider для загрузки элементов управления. Это важно, что делает SharePoint.

Вот статья от Microsoft, которая объясняет процесс:

http://support.microsoft.com/kb/910441

Вы также можете выполнить поиск по "VirtualPathProvider".

В этом примере загружается код из базы данных, но вы можете изменить его, чтобы загрузить код из сборки в качестве встроенного ресурса. Мы делаем это в моей компании, чтобы разделить мастер-страницу на многих сайтах и ​​в приложениях.

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