Вопрос

Я разрабатываю ASP.NET веб-приложение на работе, и я продолжаю сталкиваться с одной и той же проблемой:

Иногда мне хочется записать HTML-код на страницу из исходного кода.Например, у меня есть страница Editor.aspx с выводом, который меняется в зависимости от значения получаемой переменной "view". Другими словами, "Editor.aspx?view=яблоки" выводит другой HTML, чем "Editor.aspx?view=апельсины".

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

myStringBuilder.AppendLine("<ul id=\"editor-menu\">");
myStringBuilder.AppendLine("<li>List Item 1</li>");
myStringBuilder.AppendLine("</ul>");

Проблема в том, что я бы предпочел использовать для этой цели элемент управления List от ASP.NET, потому что несколько строк синтаксиса StringBuilder затрудняют читаемость моего кода.Однако ASP.NET элементы управления, как правило, выводят запутанный HTML-код с уникальными идентификаторами, встроенными стилями и случайными блоками встроенного JavaScript.

Мой вопрос в том, существует ли элемент управления ASP.NET, который просто представляет общий HTML-тег?Другими словами, существует ли элемент управления, подобный следующему примеру:

HTMLTagControl list = new HTMLTagControl("ul");
list.ID = "editor-menu";
HTMLTagControl listItem = new HTMLTagControl("li");
listItem.Text = "List Item 1";
list.AppendChild(listItem);

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

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

Решение

существует ли ASP.NET элемент управления, который просто представляет общий HTML-тег?

Да, это называется HtmlGenericControl :)

Насколько точно вы хотите, нет, но вы можете легко это обойти:

HtmlGenericControl list = new HtmlGenericControl("ul");
list.ID = "editor-menu";
HtmlGenericControl listItem = new HtmlGenericControl("li");
listItem.InnerText = "List Item 1";
list.Controls.Add(listItem);

Если вам действительно нужно перейти к голому металлу, то вам следует использовать HtmlTextWriter класс вместо StringBuilder, поскольку он более адаптирован для откачки необработанного HTML.

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

Если вы хотите просто присвоить результаты вашего stringbuilder пустому элементу управления, вы можете использовать <asp:Literal /> контролируйте это.

У LiteralControl есть конструктор, которому вы можете передать свой html...я думаю, что так будет лучше.

новый LiteralControl(sb.toString());

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