CHAME ON!
var html = "";
html += "<table class='colorful'>";
foreach(var item in collection) {
html += "<tr>";
html += "<td class='boldCell'>" + item.PropWhatever + "</td>";
// more cells here as needed
html += "</tr>";
}
html += "</table>";
placeholder1.InnerHtml = html;
Provavelmente vou ser votado por isso, mas como um ex-designer que precisou ajustar o código HTML antes que eu realmente soubesse muito sobre o .NET, o código acima era muito mais fácil de entender do que os métodos que abstraem a criação de HTML. Se você acha que um designer pode precisar ajustar seu HTML, use sequências simples como esta.
Algo que muitos desenvolvedores sentem falta quando escrevem HTML no código é que, no HTML, aspas simples ou duplas são permitidas para atributos. Portanto, em vez de escapar de todas as aspas no código (o que parece um absurdo para os não iniciados), use aspas simples para as aspas html dentro de suas strings.
BEM. Todos os que odeiam concatenar cordas estão apertando meu representante. Aqui está a maneira 'adequada' de fazer isso sem concatenação de strings, mas defendo minha opinião de que qualquer página normal com tabelas normais não apresentará problemas de desempenho fora de uma escala ridícula do tipo Google:
var sb = new System.Text.StringBuilder();
sb.Append("<table class='colorful'>");
foreach (var item in collection)
{
sb.Append("<tr>");
sb.Append("<td class='boldCell'>" + item.PropWhatever + "</td>");
// more cells here as needed
sb.Append("</tr>");
}
sb.Append("</table>");
placeholder1.InnerHtml = sb.ToString();