2009-08-10 5 views
4

Ich entwickle eine ASP.NET-Webanwendung bei der Arbeit, und ich laufe immer wieder in das gleiche Problem:ASP.NET HTML-Steuerelement mit sauberer Ausgabe?

Manchmal möchte ich HTML auf der Seite aus dem Code-Behind schreiben. Zum Beispiel habe ich eine Seite, Editor.aspx, mit einer Ausgabe, die abhängig vom Wert einer GET-Variablen "view" variiert. Mit anderen Worten, "Editor.aspx? View = apples" gibt einen anderen HTML-Code als "Editor.aspx? View = oranges" aus.

Ich Ausgabe dieses HTML derzeit mit StringBuilder. Zum Beispiel, wenn ich eine Liste erstellen wollte, könnte ich die folgende Syntax verwenden:

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

Das Problem ist, dass ich eher ASP.NET die List-Steuerelement zu diesem Zweck verwenden würde, weil mehrere Linien der String Syntax meines behindern Lesbarkeit des Codes. ASP.NET-Steuerelemente geben jedoch häufig verschachteltes HTML mit eindeutigen IDs, Inline-Stilen und gelegentlichem Inline-JavaScript-Block aus.

Meine Frage ist, gibt es ein ASP.NET-Steuerelement, die nur ein generisches HTML-Tag darstellt? Mit anderen Worten ist es eine Kontrolle wie das folgende Beispiel:

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

ich weiß, gibt es Wrapper und das so, sondern ASP.NET Komplexität zu bändigen, würde ich eher mit Einfachheit aus der get-go zu starten.

Antwort

8

gibt es eine ASP.NET-Steuerung, den lediglich einen allgemeinen HTML-Tag repräsentiert?

Ja, es heißt die HtmlGenericControl :)

Was genau das, was Sie wollen nicht, aber man kann leicht drum herum kommen:

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

Wenn Sie wirklich brauchen, um nach unten Bare Metal, dann sollten Sie die HtmlTextWriter Klasse anstelle eines StringBuilders verwenden, da diese eher auf pures HTML zugeschnitten ist.

+0

Danke für die Htmltextwriter-Spitze. Was meinst du damit, "es leicht zu umgehen"? – attack

+0

Ich habe ein Codebeispiel hinzugefügt zu zeigen, was ich meine. Im Wesentlichen müssen Sie nur noch die richtigen Eigenschaften verwenden, ist alles, was ich war Sinn. Auch, wenn Sie wirklich die absolute Kontrolle über die Ausgabe wollen, dann das Htmltextwriter verwenden, wie das ist, was alle Kontrollen letztlich unter der Haube verwenden in dem Render() -Methode. Es hat jedoch ein bisschen eine Lernkurve. – Josh

2

Wenn Sie die Ergebnisse Ihres Zeichenfolgen-Builders nur einem leeren Steuerelement zuweisen möchten, können Sie dafür ein Steuerelement <asp:Literal /> verwenden.

1

LiteralControl hat constractor, dass Sie Ihre HTML passieren kann ... Ich denke, es ist besser.

neues LiteralControl (sb.ToString());