Элементы управления по сравнению со стандартным HTML

StackOverflow https://stackoverflow.com/questions/22084

  •  09-06-2019
  •  | 
  •  

Вопрос

Я изучаю ASP.NET (C# — я знаю, что для этого конкретного вопроса это не имеет значения, но полное раскрытие информации и все такое), и хотя мне это нравится, asp:Элементы управления -style избавляют меня от утомительной работы с HTML, меня часто расстраивает определенное поведение.Вчера вечером я столкнулся с одним, работая с главными страницами:мой <asp:BulletedList ID="nav">, при преобразовании в HTML, стал <ul id="ct100_nav">.

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

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

Итак, вопрос для тех разработчиков ASP.NET, которые более опытны, чем я:исходя из вашего опыта разработки и развертывания приложений, как вы используете эти элементы управления?Вы снова прибегаете к жестко закодированному HTML?Используете ли вы смесь?Я не хочу разрабатывать свой HTML с учетом особенностей этих элементов управления, но, если возможно, я хотел бы использовать их, когда это возможно.

Что делать мальчику?

Это было полезно?

Решение

Лично,

Я думаю, что стандартные элементы управления ASP.NET подходят для внутренних задач - в этом сценарии хороши быстрые и грязные.Но однажды я работал с веб-разработчиком, который также был дизайнером, и он отказался использовать элементы управления ASP.NET и писал только код в HTML и добавлял теги runat="server", когда это необходимо.Это было больше потому, что он хотел точно знать, как его HTML будет отображаться, и в любом случае в то время некоторые элементы управления ASP.NET не отображались в соответствии со стандартами.

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

Другие советы

На самом деле я очень рад видеть, что некоторые мнения здесь совпадают с моими:ASP.NET как язык шаблонов очень плох.

Я просто хотел бы опровергнуть пару высказанных здесь замечаний (в огненном костюме!):

Дэйв Уорд упоминает о коллизиях идентификаторов — это правда, но, по моему мнению, с ними плохо справляются.Я бы предпочел видеть узлы, на которые ссылаются селекторы xpath или глубокие CSS, чем делать идентификатор фактически бесполезным, за исключением использования внутренних элементов ASP.NET, таких как clientID - это просто делает написание CSS и JS намного сложнее и бессмысленно.

Роб Купер рассказывает о том, что элементы управления являются заменой HTML, так что все в порядке (перефразируя, прости меня, Роб) — ну, это нехорошо, потому что они взяли существующий и хорошо понятный язык и сказали: «Нет, вы должны делать все по-нашему». сейчас», и их путь очень плохо реализовано.напримерasp:panel отображает таблицу в одном браузере и элемент div в другом!Без документации и выполнения разметка элемента управления входом (и многих других) непредсказуема.Как вы собираетесь заставить дизайнера написать для этого CSS?

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

Апологеты скажут «да, но вы можете изменить это в конфигурации» или расскажут о переопределении элементов управления и пользовательских элементах управления.Ну почему я должен это делать?Пакет элементов управления css, предназначенный для решения некоторых из этих проблем, отличается несемантической разметкой и не решает проблему идентификатора.

Невозможно реализовать MVC (абстрактную концепцию, а не реализацию версии 3.5) «из коробки» с помощью приложений веб-форм, поскольку эти элементы управления очень сильно связывают представление и управление.Сейчас существует барьер входа для традиционного веб-дизайнера, потому что ему приходится заниматься серверным кодом, чтобы реализовать то, что раньше было отдельными областями CSS и JS.Я сочувствую этим людям.

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

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

Я думаю, что ASP.NET может многому научиться у связанных технологий в мире LAMP и Rails, а до тех пор я надеюсь работать с 3.5 MVC там, где смогу.

(извините, что так долго </rant>)

Короткий ответ: вам никогда не следует использовать asp:...версию стандартного элемента управления HTML, если у вас нет действительно веской причины.

Младшие разработчики часто увлекаются использованием этих элементов управления, поскольку они описаны в большинстве книг по ASP.NET, поэтому предполагается, что они должны быть лучше.Они не.На данный момент, после 8 лет ежедневной разработки ASP.NET, я могу вспомнить только 2 или 3 случая, когда действительно имеет смысл использовать asp:...INPUT-контроль над стандартным HTML-контролем.

Что касается идентификаторов серверных элементов управления:Вы можете найти фактический идентификатор, который будет записан в браузер, обратившись к ClientID.Таким образом, вы можете комбинировать сценарии на стороне сервера и на стороне клиента, и при этом вам не придется жестко кодировать _id="ct100_nav"_.

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

Надеюсь это поможет

@Brian, да!Вы можете в значительной степени контролировать все поведение.Рассмотрите возможность создания пользовательских элементов управления (есть три типа).Недавно я дал их обзор в своем вопросе. здесь.

Я бы сильно рекомендую проверить их, мне это безмерно помогло :)

Я тоже нахожусь в своем приключении с ASP.NET, и у меня тоже были подобные разочарования.Однако вскоре к этому привыкаешь.Вам просто нужно помнить, причина, по которой вам не придется заниматься утомительным созданием HTML, заключается в том, что элементы управления ASP.NET делают все это за вас..

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

Раньше мне приходилось делать это, когда некоторые элементы управления по умолчанию не проходили проверку W3C, добавляя дополнительную разметку здесь и там, поэтому я просто переопределял и редактировал по мере необходимости (исправление, которое занимало буквально пару минут).

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

HTML отображается с такими идентификаторами, потому что это способ ASP.NET предотвратить конфликты идентификаторов.Каждый элемент управления контейнера, такой как главная страница или элемент управления мастера, добавляет «ID_» к своим дочерним идентификаторам.

В случае с вашим маркированным списком ListView обеспечивает хорошую золотую середину.Вы по-прежнему можете привязать его к источнику данных, но это дает вам гораздо более жесткий контроль над отображаемым HTML.У Скотта Гу есть хорошее введение в ListView:

http://weblogs.asp.net/scottgu/archive/2007/08/10/the-asp-listview-control-part-1-building-a-product-listing-page-with-clean-css-ui. aspx

Если префикс идентификатора, добавленный ASP.NET, является проблемой для доступа к ним позже с помощью JS или чего-то еще...у вас есть серверная часть свойства .ClientID.

Если накладные расходы добавляются ASP.NET, вам следует рассмотреть ASP.NET MVC (все еще предварительная версия), где у вас есть полный контроль над создаваемым HTML.

Я перехожу на MVC, потому что мне тоже не нравятся все эти добавленные вещи....

Я думаю, что большинство ответов здесь отражают точку зрения дизайнера.В проекте малого и среднего размера синхронизация кода и CSS/HTML и приведение их в соответствие со стандартами и чистота могут показаться накладными расходами.Способ дизайнера добиться этого — получить полный контроль над визуализируемым HTML.Но есть много способов получить полный контроль в ASP.NET.И для меня наличие необходимого HTML в файле aspx/ascx — самый немасштабируемый и грязный способ сделать это.Если вы хотите стилизовать элементы управления с помощью CSS, вы всегда можете установить класс на стороне сервера с помощью свойства CssClass.Если вы хотите получить к ним доступ через JS, вы можете снова создать JS с правильными идентификаторами на стороне сервера.Единственным недостатком этого является то, что разработчику и дизайнеру приходится тесно сотрудничать.В любом большом проекте это неизбежно.Но преимущества, которые предоставляет ASP.NET, намного превосходят эти трудности.Тем не менее, если вам нужен совместимый со стандартами HTML, поддержка оформления и другие возможности для управления отображаемой разметкой, вы всегда можете использовать сторонние элементы управления.

Как уже упомянул Дэйв Уорд, «это способ ASP.NET предотвратить конфликты идентификаторов».

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

Как уже упоминали другие, если вам нужен доступ к элементам управления для javascript, используйте свойство ClientScript, которое предоставит вам доступ к ClientScriptManager, и таким образом зарегистрируйте свои сценарии на странице.При написании сценариев обязательно используйте свойство ClientID элемента управления, на который вы пытаетесь сослаться, а не просто вводите идентификатор элемента управления.

Если вам нужен такой большой контроль над отображаемым HTML, посмотрите АСП.NET MVC вместо.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top