controllo ASP.NET HTML con uscita pulita?
-
12-09-2019 - |
Domanda
Sto sviluppando un'applicazione Web ASP.NET sul posto di lavoro, e io continuo a correre lo stesso problema:
A volte ho voglia di scrivere codice HTML per la pagina dal code-behind. Ad esempio, ho una pagina, Editor.aspx, con uscita che varia a seconda del valore di una variabile GET "vista". In altre parole, "Editor.aspx Mostra = mele" uscite diverse HTML di "Editor.aspx Mostra = arance".
Io attualmente in uscita questo HTML con StringBuilder. Per esempio, se ho voluto creare una lista, potrei utilizzare la seguente sintassi:
myStringBuilder.AppendLine("<ul id=\"editor-menu\">");
myStringBuilder.AppendLine("<li>List Item 1</li>");
myStringBuilder.AppendLine("</ul>");
Il problema è che avrei preferito usare il controllo Lista di ASP.NET per questo scopo, perché diverse linee di sintassi StringBuilder ostacolano la leggibilità del mio codice. Tuttavia, i controlli ASP.NET tendono ad uscita contorto HTML, con l'identificazione unica di stili inline, e il blocco occasionale di JavaScript inline.
La mia domanda è: esiste un controllo ASP.NET che rappresenta semplicemente un tag HTML generica? In altre parole, v'è un controllo come il seguente esempio:
HTMLTagControl list = new HTMLTagControl("ul");
list.ID = "editor-menu";
HTMLTagControl listItem = new HTMLTagControl("li");
listItem.Text = "List Item 1";
list.AppendChild(listItem);
So che ci sono involucri e il tale, ma invece di domare ASP.NET complessità, avrei preferito iniziare con semplicità dal get-go.
Soluzione
c'è un controllo ASP.NET che solo rappresenta un tag HTML generica?
Sì, si chiama il HtmlGenericControl :)
Per quanto riguarda esattamente quello che vuoi no, ma si può aggirare 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 avete veramente bisogno di scendere a metallo nudo allora si dovrebbe utilizzare il HtmlTextWriter classe invece di uno StringBuilder come è più personalizzato su misura per pompare fuori HTML grezzo.
Altri suggerimenti
Se si desidera assegnare solo i risultati del vostro StringBuilder per un controllo in bianco, è possibile utilizzare un controllo <asp:Literal />
per questo.
LiteralControl ha constractor che è possibile passare il vostro html ... penso che sia meglio.
nuovo LiteralControl (sb.ToString ());