controle ASP.NET HTML com saída limpa?
-
12-09-2019 - |
Pergunta
Estou desenvolvendo uma aplicação web ASP.NET no trabalho, e eu continuo a correr para o mesmo problema:
Às vezes eu quero escrever HTML para a página a partir do código-behind. Por exemplo, eu tenho uma página, Editor.aspx, com saída que varia dependendo do valor de uma variável GET, "vista". Em outras palavras, "Editor.aspx? View = maçãs" saídas HTML diferente "Editor.aspx? View = laranjas".
Eu atualmente saída deste HTML com StringBuilder. Por exemplo, se eu quisesse criar uma lista, eu poderia usar a seguinte sintaxe:
myStringBuilder.AppendLine("<ul id=\"editor-menu\">");
myStringBuilder.AppendLine("<li>List Item 1</li>");
myStringBuilder.AppendLine("</ul>");
O problema é que eu prefiro usar o controle de lista do ASP.NET para este fim, porque várias linhas de StringBuilder sintaxe dificultar a legibilidade do meu código. No entanto, controles ASP.NET tendem a saída complicado HTML, com um ID único do, estilos inline, eo bloco ocasional de linha JavaScript.
A minha pergunta é, existe um controle ASP.NET que apenas representa uma tag HTML genérico? Em outras palavras, há um controle como o exemplo a seguir:
HTMLTagControl list = new HTMLTagControl("ul");
list.ID = "editor-menu";
HTMLTagControl listItem = new HTMLTagControl("li");
listItem.Text = "List Item 1";
list.AppendChild(listItem);
Eu sei que existem invólucros e tal, mas em vez de domar a complexidade ASP.NET, eu prefiro começar com simplicidade a partir do get-go.
Solução
Existe um controle ASP.NET que representa apenas uma tag HTML genérico?
Sim, ele é chamado o HtmlGenericControl :)
Quanto exatamente o que você não quer, mas você pode obter em torno dele facilmente:
HtmlGenericControl list = new HtmlGenericControl("ul");
list.ID = "editor-menu";
HtmlGenericControl listItem = new HtmlGenericControl("li");
listItem.InnerText = "List Item 1";
list.Controls.Add(listItem);
Se você realmente precisa para começar a nu metal, então você deve usar o HtmlTextWriter classe em vez de um StringBuilder como é mais customizado para bombear para fora HTML puro.
Outras dicas
Se você quiser apenas atribuir os resultados de sua stringbuilder a um controlo em branco, você pode usar um controle <asp:Literal />
para isso.
LiteralControl tem constractor que você pode passar o seu html ... eu acho que é melhor.
novo LiteralControl (sb.ToString ());