Создание HTMLControls вместо вывода строки HTML

Недавно я пытался объяснить программисту, почему в ASP.Net они должны создавать HTMLControls вместо создания строк HTML для создания веб-страниц.

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

Если бы вам пришлось ответить на этот вопрос, что бы вы ответили?

Почему

Dim divA as New HtmlControls.HtmlGenericControl("div") 
Dim ulList1 as New HtmlControls.HtmlGenericControl("ul") 
Dim liObj1, liObj2, liObj3 as New HtmlControls.HtmlGenericControl("li") 
liObj1.innerText = "List item 1" 
liObj2.innerText = "List item 2"
liObj3.innerText = "List item 3"
ulList1.Controls.Add(liObj1)
ulList1.Controls.Add(liObj2)
ulList1.Controls.add(liObj3)
divA.Controls.add(ulList1)

"лучше чем:

Dim strHTML as String
strHTML = "<div><ul><li>List item 1</li><li>List item 2</li><li>List item 3</li></ul></div>"

? Не выглядит лучше. Посмотри на весь этот код! И это очень упрощенный пример для экономии места. Я не думаю, что когда-либо создавал бы такой список вручную, просто выполнял бы итерацию по коллекции или с помощью более продвинутого веб-элемента управления, но я пытаюсь проиллюстрировать это.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
1 595
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Это ДЕЙСТВИТЕЛЬНО лучше только в двух случаях:

  1. Вам нужно что-то сделать с этими элементами управления в вашем коде
  2. Получающийся в результате ручной HTML-код настолько запутан, что его нецелесообразно хранить в виде строки.

С точки зрения кода это не лучшее решение. Они оба отлично работают, что касается дисплея.

Ответ принят как подходящий

Я тоже не делаю. Вместо этого я:

  1. Создайте настраиваемый элемент управления, который инкапсулирует желаемую конструкцию
  2. или (очень похоже) создать простой класс со свойствами, которые мне нужны, и переопределить метод .ToString() для создания желаемого HTML.

Но из двух вариантов есть пара причин, по которым первый лучше:

  • Вы можете изменить свойства элементов управления html или добавить другие элементы управления в дерево на более поздних этапах жизненного цикла страницы.
  • ASP.Net отвечает за рендеринг HTML. У вас гарантированно не будет ошибок, которые могут нарушить соответствие xhtml.

Одно большое преимущество: написание HTML в виде строки очень подвержено человеческим ошибкам и может очень быстро стать нечитаемым и неуправляемым.

Сгенерированный HTML будет значительно лучше защищен от людей и самодокументируется.

(Для записи я презираю оба метода и использую XSLT для создания шаблонов)

Вы можете предпочесть систему шаблонов, которую предоставляют большинство современных фреймворков для веб-разработки. Я не уверен в вариантах, доступных для ASP, но их должно быть несколько. Использование системы шаблонов позволяет вам воздерживаться от размещения какой-либо разметки в вашем коде или написания подробных блоков построения документа, как в двух примерах, которые вы приводите в своем вопросе.

Попробуйте поискать в Google "шаблоны шаблонов asp.net" для начала. Было бы неплохо, если бы для asp.net была такая страница. Сообщите нам, если найдете:

http://wiki.python.org/moin/Templating

Лично я бы создал элементы управления только в том случае, если бы мне пришлось, так как большая часть HTML-кода Microsoft работает только в режиме quirks, и я согласен с тем, что создание HTML-строк ОЧЕНЬ подвержено ошибкам.

Я создаю XHTML с помощью анализатора XML, а затем беру .toString из объекта XMLDocument. Он подробный, но вывод всегда правильно отформатирован и всегда работает.

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

Но если вы добавите его с помощью .NET Objects (рекомендуемый способ), фактический код, который отображается в браузере конечного пользователя, создается во время выполнения. Хороший пример использования «CSS Control Adapter Toolkit для ASP.NET 2.0», который изменяет способ визуализации элементов управления .NET, изменяя метод по умолчанию для визуализации элементов управления с использованием чистого CSS.

Создание таких элементов управления, как у вас, - это самая худшая вещь в ASP.NET. MVC или подход с использованием Partials - гораздо лучший (более простой в обслуживании) способ создания HTML.

Это просто повторяет вопрос. Как и почему лучше?

James A Mohler 16.12.2012 05:34

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