Наследование от Control vs. Web Control

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

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

"Если ваш элемент управления отображает элемент пользовательского интерфейса (UI) или любой другой видимый элемент на клиенте, вы должны унаследовать свой элемент управления от System.Web.UI.WebControls .. ::. WebControl (или производного класса). Если ваш элемент управления отображает элемент, который не отображается в браузере, например скрытый элемент или метаэлемент, наследует ваш элемент управления от System.Web.UI .. ::. Control. Класс WebControl является производным от Control и добавляет свойства, связанные со стилем, такие как как Font, ForeColor и BackColor. Кроме того, элемент управления, производный от WebControl, участвует в функциях тем ASP.NET без какой-либо дополнительной работы с вашей стороны ».

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


person PositiveGuy    schedule 13.07.2009    source источник


Ответы (3)


WebControl не отображает таблицы или что-то в этом роде, если вы этого не укажете. Что у него есть, так это функции стиля, которые большинство пользователей ожидают от элемента управления, который отображается с помощью пользовательского интерфейса.

Его использование не требует больших затрат. Попробуйте и посмотрите, не вызовет ли он у вас никаких проблем.

person John Saunders    schedule 13.07.2009
comment
вы говорите о том, что он предоставляет такие свойства, как cssClass и т. д.? - person PositiveGuy; 13.07.2009
comment
Мой контроль - это выдача HTML, указанного из нашей таблицы БД, из нашей системы CMS, который пользователь ввел через нашу систему администрирования CMS. Любой стиль будет либо уже в этом HTML, либо в любых элементах, таких как div, в которые я помещаю это содержимое в закулисную логику с моим настраиваемым элементом управления. Поэтому я не предвижу необходимости в cssClass и т. Д., Поскольку мой контроль справится с этим. Поэтому, если я унаследую от Control, он все равно будет выводить некоторые основные компоненты пользовательского интерфейса, но нет необходимости стилизовать это во время выполнения. - person PositiveGuy; 13.07.2009
comment
Хорошо, это имеет смысл, и да, я говорил о CssClass, BackColor, BorderColor и т. Д. - person John Saunders; 13.07.2009
comment
И не забывайте HtmlTextWriterTag - person Ralf de Kleine; 23.03.2011

Контроль

Наследование от класса Control позволяет нашему элементу управления использовать преимущества методов рендеринга, предоставляемых классом Control, а также использование ViewState.

WebControl

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

От какого класса я должен унаследоваться?

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

От: http://dotnetslackers.com/articles/aspnet/ASPNETCustomControlsPart1.aspx

person SolutionYogi    schedule 13.07.2009
comment
Хорошо, поэтому единственное РЕАЛЬНОЕ возможное преимущество с точки зрения хороших стандартов заключается в том, что если вы собираетесь использовать WebControl, то любой, кто реализует ваш элемент управления, может использовать CssClass для этого элемента управления. Все остальные, такие как font-size, background-color, - это мусор, так как вы всегда должны использовать .css со стилями и идентификаторами в своем коде. - person PositiveGuy; 13.07.2009
comment
Когда вы создаете настраиваемый элемент управления, который практически не требует пользовательского интерфейса, вы должны быть производным от класса Control. Если вашему элементу управления действительно требуется расширенная поддержка пользовательского интерфейса, вы должны унаследовать его от WebControl. Хорошо, но со своей точки зрения я понимаю, что единственная причина, по которой мне нужен WebControl, - это предоставить атрибут cssClass. Итак, если ваш элемент управления выплевывает, скажем, некоторый контент пользовательского интерфейса на основе системы CMS, и вам не нужно указывать cssClass (потому что вы делаете это через свою логику в своем настраиваемом серверном элементе управления за кулисами), тогда не используйте WebControl - person PositiveGuy; 13.07.2009

Итак, у вас есть вопрос? Я думаю, что различия между ними были подробно рассмотрены в статье MSDN.

person Janie    schedule 13.07.2009
comment
Просто пытаюсь проверить, действительно ли есть какие-либо другие преимущества от использования WebControl, кроме получения атрибута cssClass. И это наследование от Control не означает, что вы не собираетесь его стилизовать, что вы всегда можете использовать простые стили в своих пользовательских методах управления. На самом деле я просто не вижу пользы в использовании WebControl, если вам в конечном итоге не понадобится доступный атрибут cssClass - вот что я делаю лично. - person PositiveGuy; 13.07.2009
comment
Проблема в том, что все, что мне было сказано, - это статья MSDN, которую я только что прочитал. Я понимаю это, но вот следующее утверждение: когда вы создаете настраиваемый элемент управления, который требует небольшого пользовательского интерфейса или не требует его вообще, вы должны быть унаследованы от класса Control. Что, черт возьми, это означает, что вы не собираетесь отображать HTML (UI) или они имеют в виду, если вам не нужны СТИЛИ. это плохой выбор слов на этой странице. В этом предложении говорится, что вы вообще не визуализируете какой-либо пользовательский интерфейс. Они имеют в виду стиль. - person PositiveGuy; 13.07.2009
comment
Далее говорится, что если ваш элемент управления отображает элемент пользовательского интерфейса (UI) или любой другой видимый элемент на клиенте, вы должны унаследовать свой элемент управления от System.Web.UI.WebControls .. ::. WebControl. Не правда. В моем случае он выплюнет много пользовательского интерфейса ... но пользователи не должны добавлять к нему какие-либо классы css. - person PositiveGuy; 13.07.2009
comment
так что у меня есть проблема с их контекстом, ПОЧЕМУ использовать либо или. Вы все еще можете выплевывать кучу HTML из своего элемента управления, но на самом деле, если вы не хотите, чтобы кто-либо добавлял cssClass или другие атрибуты, вы все равно используете Control для рендеринга своей кучи HTML. Мне не нравится, как они определяют причину использования одного по сравнению с другим и в основном выбор слов. - person PositiveGuy; 13.07.2009
comment
У вас может быть что-то dervied из Control, которое, например, генерирует кучу javascript (это, очевидно, не визуально) - person Janie; 13.07.2009