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

используйте , общий май выражения .

таблицы хочет указать, что это - SQL Server 2005 или выше только. Dale Ragan

вот статья о рекурсии SqlTeam без общих выражений таблицы.

10
задан Mike Cole 19 November 2009 в 19:22
поделиться

6 ответов

Если файл находится в пути к классам (что непонятно, но это было бы хорошей идеей), я бы предложил использовать служебный класс org.apache.struts2. util.ClassLoaderUtils . Из документации по java:

Этот класс чрезвычайно полезен для отказоустойчивой загрузки ресурсов и классов, которая работает на разных серверах приложений.

Обратите особое внимание на статический метод ClassLoaderUtils.getResourceAsStream (String resourceName, Class callClass) , который является удобным методом для загрузки ресурса в виде потока. Как указано в документации, алгоритм, используемый для поиска ресурса, приведен в getRessource () :

Этот метод попытается загрузить ресурс, используя следующие методы

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

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

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

6
ответ дан 3 December 2019 в 22:37
поделиться

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

Из MSDN:

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

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

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

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

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

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

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

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

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

9
ответ дан 3 December 2019 в 22:37
поделиться

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

0
ответ дан 3 December 2019 в 22:37
поделиться

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

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

Лично я считаю, что это довольно неприятно, что это именно так .

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

0
ответ дан 3 December 2019 в 22:37
поделиться

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

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

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

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

0
ответ дан 3 December 2019 в 22:37
поделиться

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

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

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

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

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

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

0
ответ дан 3 December 2019 в 22:37
поделиться
Другие вопросы по тегам:

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