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.

Foi útil?

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 ());

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top