Eu acredito que a marcação deve permanecer na marcação e não no código por trás.
Cheguei a uma situação em que acho aceitável criar o HTML no código por trás. Eu gostaria de ter algum consenso sobre quais são as melhores práticas ou deveriam ser.
Quando é aceitável criar html no código por trás? Qual é o melhor método para criar este html? (exemplo: Strings, StringBuilder, HTMLWriter, etc)
Respostas:
O uso de algo como o Razor não se aplica aqui? Porque se você está gerando muita geração de html usando um mecanismo de exibição, pode ser muito mais fácil. Também foi criado para ser usado fora do ASP.NET.
No entanto, às vezes não é isso que você precisa. Você já pensou em usar a classe TagBuilder, que faz parte do .net (mvc)? Há também o HtmlWriter no System.Web.UI (para formulários da Web). Eu recomendaria um desses se você estiver fazendo
Controls
ouHtml Helpers
.fonte
Eu usaria o Html Agility Pack para montar o HTML e depois gravá-lo em um arquivo de texto.
Muitas horas de trabalho foram dedicadas a tornar o Html Agility Pack robusto e
compatível comHTML.Eu acho que inclui até um aplicativo de exemplo que gera HTML.
Na página inicial:
fonte
Eu usaria htmltags para criar HTML.
Exemplo:
E então CSQuery se eu quiser analisar HTML
Exemplo:
fonte
Obviamente, existem bibliotecas por aí, como o HTML Agility Pack, que podem ajudá-lo nesses empreendimentos.
Se você realmente não deseja usar uma biblioteca existente e deseja um código simples e simples, eu gosto da idéia de abstrair alguns comportamentos, como uma resposta anterior. Também gosto da idéia de usar um StringBuilder subjacente, em vez de uma string por duas razões:
Se eu não precisar de um mecanismo HTML de engenharia massiva, criaria uma interface simples e intuitiva
fonte
Se você acabar usando apenas strings, não se esqueça de escapar de todos os caracteres reservados em HTML nos dados de saída.
Eu recomendo usar uma classe ou biblioteca compatível com HTML em vez de trabalhar diretamente com cadeias de caracteres. HTMLWriter parece um bom começo.
fonte
Quase dois anos após o post original - aqui está uma solução que funcionou bem para mim. No documento de destino, coloco o seguinte:
a função que está sendo chamada se parece com isso:
E a saída resultante no navegador é a esperada:
O número é: 0
O número é: 1
O número é: 2
O número é: 3
O número é: 4
Quando vou exibir a fonte, encontro o seguinte:
fonte
CHAME ON!
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:
fonte
+=
dentro de um loop dessa maneira não é escalável; como as strings são imutáveis, você cria uma nova string toda vez que faz isso. Use um emStringBuilder
vez disso.If you think a designer might ever have to tweak your HTML, use simple strings like this.
é difícil de entender? A definição de código horrível para algumas pessoas é aquela que compra milissegundos de desempenho com o custo de levar muitos segundos para entender completamente. Claramente, quando você antecipa que seu código é visualizado ou mantido pelo menor denominador comum de indivíduo, pode-se certamente afirmar que escrever um código mais fácil de entender ou ajustar é sempre melhor do que o código mais limpo ou com melhor desempenho.