Когда вы будете использовать пользовательский веб-контроль над пользовательским веб-контролем? - PullRequest
8 голосов
/ 22 сентября 2008

Может кто-нибудь объяснить, когда использовать каждый из них? Они почти кажутся взаимозаменяемыми во многих случаях.

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

Кроме того, я ищу лучший способ получить доступ к элементам управления из JavaScript (GetElementById). Таким образом, точка в правильном направлении для добавления поддержки на стороне клиента была бы отличной.

Ответы [ 8 ]

10 голосов
/ 22 сентября 2008

Это с сайта Microsoft:

Пользовательские веб-элементы управления

  • Легче создать
  • Ограниченная поддержка для потребителей, использующих инструмент визуального дизайна
  • В каждом приложении требуется отдельная копия элемента управления
  • Невозможно добавить на панель инструментов в Visual Studio
  • Хорошо для статического макета

Пользовательские веб-элементы управления

  • Сложнее создать
  • Полная поддержка инструментов визуального дизайна для потребители
  • Только одна копия элемента управления требуется, в глобальной сборке кэш
  • Можно добавить на панель инструментов в Visual Studio
  • Хорошо для динамического макета

http://msdn.microsoft.com/en-us/library/aa651710(VS.71).aspx

2 голосов
/ 22 сентября 2008

UserControl должен быть размещен на веб-сайте и связан с файлом ASCX с использованием модели codebehind. Следовательно, с помощью пользовательского элемента управления вы можете определить базовую разметку для элемента управления в файле ASCX и поместить весь код в файл ASCX.CS.

WebControl - это просто класс, и он не позволяет вам определять связанный файл ASCX; вам нужно переопределить функцию Render, чтобы распечатать любую разметку, которую собирается создать элемент управления. Однако, поскольку он не зависит от ASCX, его можно поместить в общую библиотеку. (DLL)

Чтобы ответить на ваш вопрос: и Web-, и UserControls имеют одинаковое преимущество - они занимают некоторую часть страницы и инкапсулируют ее. Я использую UserControls, когда рассматриваемый код применяется только к одному из моих сайтов; если я использую похожий код на нескольких сайтах, я преобразую код в WebControl и перенесу его в общую библиотеку. Таким образом, когда мне нужно его обновить, я делаю изменения в одном месте, а не в 3 или 4.

Совет: вы можете обойти некоторые проблемы, связанные с определением собственного WebControl, наследуя один из стандартных ASP WebControls. Многие стандартные элементы управления, такие как Label или Image, не закрыты - вы можете наследовать их и переопределять их методы, чтобы создать собственную специализированную версию этого элемента управления. Это гораздо проще и менее подвержено ошибкам, чем прямое расширение WebControl.

1 голос
/ 23 сентября 2008

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

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

Если внимание уделяется деталям, пользовательский элемент управления можно записать для отображения в конструкторе (хотя это может не стоить проблем).

1 голос
/ 22 сентября 2008

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

Обычно мы разделяем наш пользовательский интерфейс на отдельные области функциональности, используя UserControls. Однако если мы создаем функциональность, которую хотим использовать в нескольких решениях, мы обычно создаем их как пользовательские элементы управления.

На панель инструментов могут быть добавлены только пользовательские элементы управления.

Вот выдержка из Microsoft:

http://msdn.microsoft.com/en-us/library/aa651710(VS.71).aspx

0 голосов
/ 02 июля 2010

Пользовательские элементы управления

  • Простота реализации, поскольку вы можете визуально перетаскивать другие элементы управления на элементе разметки.
  • Хорошая дизайнерская поддержка в Visual Studio
  • Может быть повторно использовано только в том же проекте
  • Вы также можете создавать шаблонные элементы управления, если хотите (хотя и не так часто)

Пользовательские элементы управления сервером

  • Сложнее создать, но существует целый ряд возможных сценариев:
    • Наследовать от существующих элементов управления, таких как Label, Button, ...
    • Создание составного элемента управления
    • Создание шаблонов, + привязка данных, элементы управления
  • Отличное повторное использование в других проектах
  • Идеально подходит для изготовления каркасов, которые могут использоваться в масштабе всей компании
0 голосов
/ 22 сентября 2008

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

Основным отличием является то, что веб-управление является атомной единицей. Он должен работать так же, как и все остальные серверные элементы управления по умолчанию, которые есть в Visual Studio (включая режим конструктора). Кроме того, он полностью построен в коде и хранится в DLL (т. Е. Нет html-стороны и ничего не публикуется на веб-сайте).

Хотя пользовательский элемент управления является .NET-версией ASP Include. Есть фрагмент HTML с соответствующей страницей кода. Есть файл ASCX, который выкладывается на сайт во время публикации. Кроме того, их проще разрабатывать, чем серверные элементы управления.

Один лучше другого? Это зависит от цели. Но в целом, если вы создаете что-то для других людей / проектов, используйте веб-контроль. Если вы создаете что-то для собственного проекта, используйте пользовательский элемент управления.

Теперь, что касается JS, это сложнее описать, и оно требует довольно большого обсуждения само по себе. Для серверных элементов управления вам нужно будет предоставить хуки для JS, чтобы получить идентификатор клиента для каждого из внутренних элементов управления. Пока пользовательский элемент управления, вы можете кодировать JS непосредственно в пользовательском элементе управления и получать доступ к элементам управления так же, как на странице ASPX.

0 голосов
/ 22 сентября 2008

Simple:

UserControl:

  • UserControl нужен файл * .ascx для завершения инициализации экземпляра. Поэтому вы не можете получить один UserControl от другого.
  • UserControl имеет файл * .ascx, так что вы можете легко написать HTML. И (самое главное) вы можете изменить содержимое * .ascx файла и изменить внешний вид элемента управления во время выполнения веб-приложения.

WebControl:

  • WebControl является "единственным" классом в сборке, поэтому вы можете получить из него другой элемент управления.
  • В WebControl нет * .ascx (или другого) файла, поэтому никто не может изменить внешний вид этого элемента управления (например, неквалифицированных веб-администраторов).
0 голосов
/ 22 сентября 2008

Для доступа к ним из JavaScript, вы должны использовать document.GetElementById('<%=TheControl.ClientID%>').
Разница между веб-элементом управления и пользовательским элементом управления состоит в том, что пользовательский элемент управления имеет файл ascx с определением html, а веб-элемент управления - нет; это причина для других различий. Кроме того, для пользовательских элементов управления вы не можете использовать new Control(), вам нужно использовать LoadControl вместо этого, потому что это загружает .ascx.
Для простых элементов управления, которые наследуются от элементов управления .Net, таких как текстовое поле с проверкой или что-то подобное, я склонен использовать веб-элементы управления; для более сложных элементов управления с HTML и внутренними элементами управления я склонен использовать пользовательские элементы управления. Но это в основном ваши личные предпочтения.

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