Есть ли в C# 3.0 классы, которые помогают мне создавать статический HTML-код?

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

public string GetCheckboxHtml()
{
    return ("<input type = "checkbox" name = "somename" />");
}

Разве не существует набора строго типизированных классов, которые описывают элементы html и позволяют мне вместо этого писать такой код:

var checkbox = new HtmlCheckbox(attributes);
return checkbox.Html();

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

Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
396
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Один из вариантов - использовать XElementфункциональная конструкция. См. это сообщение в блоге для примера генератора календаря.

В вашем случае ваш Html может быть создан с помощью:

var input = new XElement("input",
    new XAttribute("type", "checkbox"),
    new XAttribute("name", "somename"));

return input.ToString();

Вы можете использовать классы в пространстве имен System.Web.UI.HtmlControls. Затем вы можете использовать RenderControl для создания HTML-содержимого.

HtmlInputCheckBox box = new HtmlInputCheckBox();

StringBuilder sb = new StringBuilder();
using(StringWriter sw = new StringWriter(sb))
using(HtmlTextWriter htw = new HtmlTextWriter(sw))
{
    box.RenderControl(htw);
}
string html = sb.ToString();

Это кажется хорошим решением, однако меня беспокоит только «тяжелый» характер HtmlControls, включенных в ASP.NET. Я испытываю сильное отвращение к ASP.NET WebForms (я предпочитаю ASP.NET MVC), что может предвзято относиться ко мне. Я действительно ценю ваш вклад.

Brian Leahy 08.11.2008 19:51

Собственно я с тобой согласен =)

Cristian Libardo 10.11.2008 19:54
Ответ принят как подходящий

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

Мне очень нравится это решение. Я, наверное, этим воспользуюсь. Не могу поверить, что забыл о помощниках HTML в ASP.NET MVC. Спасибо!

Brian Leahy 08.11.2008 19:53

HtmlTextWriter содержит такие полезные вещи, как «WriteStartTag» и «WriteEndTag», которые можно довольно легко использовать для создания правильно сформированного HTML.

По сути, вы передаете тэг и атрибуты в HtmlTextWriter, и он генерирует правильный HTML и закрывает его должным образом с помощью WriteEndTag.

Вы также можете использовать предварительно написанные HTMLControls, которые превращают этот код в строго типизированные классы.

Также рассмотрите возможность использования System.Xml. Используя его, вы почти гарантируете, что ваш HTML-код совместим с XHTML.

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