У меня есть убеждение, что разметка должна оставаться в разметке, а не в коде позади.
Я попал в ситуацию, когда считаю приемлемым встроить HTML в код позади. Я хотел бы иметь некоторое согласие относительно того, каковы лучшие практики или должны быть.
Когда допустимо встраивать html в код? Каков наилучший метод для создания этого HTML? (пример: Strings, StringBuilder, HTMLWriter и т. д.)
Ответы:
Использование чего-то вроде Razor здесь не применимо? Потому что, если вы делаете много html-генерации с использованием механизма представления, это может сделать это намного проще. Он также был создан для использования вне ASP.NET.
Однако иногда это не то, что вам нужно. Рассматривали ли вы использование класса TagBuilder, который является частью .net (mvc)? В System.Web.UI также есть HtmlWriter (для веб-форм). Я бы порекомендовал один из них, если вы делаете
Controls
илиHtml Helpers
.источник
Я бы использовал Html Agility Pack, чтобы собрать HTML, а затем записать его в текстовый файл.
Много человеко-часов ушло на то, чтобы сделать Html Agility Pack надежным и
совместимым сHTML.Я думаю, что это даже включает пример приложения, которое генерирует HTML.
С домашней страницы:
источник
Я бы использовал htmltags для создания HTML.
Пример:
А потом CSQuery, если я захочу разобрать HTML
Пример:
источник
Конечно, есть библиотеки, такие как HTML Agility Pack, которые могут помочь вам в этих начинаниях.
Если вы действительно не хотите использовать существующую библиотеку и хотите простой, неуклюжий код, мне нравится идея абстрагировать некоторые варианты поведения, как указано в предыдущем ответе. Мне также нравится идея использования базового StringBuilder, а не строки по нескольким причинам:
Если мне не нужен массивно сконструированный HTML-движок, я бы создал простой, интуитивно понятный интерфейс
источник
Если вы в конечном итоге используете только строки, не забудьте экранировать все зарезервированные символы HTML в ваших выходных данных.
Однако я рекомендую использовать HTML-класс или библиотеку вместо прямой работы со строками. HTMLWriter выглядит довольно хорошим началом.
источник
Спустя почти два года после первоначального поста - вот решение, которое хорошо сработало для меня. В целевой документ я помещаю следующее:
вызываемая функция выглядит так:
И результат в браузере будет таким, как и ожидалось:
Число: 0
Число: 1
Число: 2
Число: 3
Число: 4
Когда я иду к источнику, я нахожу следующее:
источник
ПЫЛАТЬ!
Я, вероятно, буду за это опускаться, но как бывший дизайнер, который должен был настроить HTML в коде, прежде чем я действительно много знал о .NET, приведенный выше код был намного проще для понимания, чем методы, которые абстрагируют создание HTML. Если вы думаете, что дизайнеру может понадобиться настроить ваш HTML, используйте простые строки, подобные этой.
Я вижу, что многие разработчики упускают при написании HTML в коде то, что в HTML допускаются одинарные или двойные кавычки для атрибутов. Таким образом, вместо экранирования всех кавычек в коде (который выглядит неуклюже как бродяга для не инициированного), просто используйте одинарные кавычки для кавычек html внутри ваших строк.
FINE. Все, что вы связываете ненавистников, связывают мою репутацию. Вот «правильный» способ сделать это без конкатенации строк, но я придерживаюсь своего мнения, что любая обычная страница с обычными таблицами не будет представлять проблем с производительностью за пределами какой-то нелепой Google-подобной шкалы:
источник
+=
внутри цикла таким образом не масштабируется вообще; Поскольку строки неизменяемы, вы создаете новую строку каждый раз, когда делаете это. ИспользуйтеStringBuilder
вместо.If you think a designer might ever have to tweak your HTML, use simple strings like this.
трудно понять? У некоторых людей определение ужасного кода - это то, которое покупает миллисекунды производительности, затрачивая много секунд на полное понимание. Ясно, что когда вы ожидаете, что ваш код будет просматриваться или поддерживаться наименьшим общим знаменателем отдельных лиц, можно с уверенностью сказать, что написание кода, который легче понять или настроить, всегда лучше, чем самый чистый или наиболее эффективный код.