ASP.NET HTML контроль с чистым выводом? - PullRequest
4 голосов
/ 10 августа 2009

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

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

В настоящее время я вывожу этот 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, я бы предпочел начать с простоты с самого начала.

Ответы [ 3 ]

8 голосов
/ 10 августа 2009

есть ли элемент управления 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.

2 голосов
/ 10 августа 2009

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

1 голос
/ 26 августа 2009

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

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

...