Pergunta

Houve muitas discussões sobre Visualização-engenheiros Para o ASP.NET MVC e algumas críticas contra o "Tag-Soup" em linha com loops e coisas assim.

A alternativa ou complemento tem sido usar html-helpers, que são apenas chamadas de método embutido.

Quando olho para dentro do ASP.NET HTML-HELPERS hoje, eles estão usando uma classe chamada Tagbuilder.

Minha proposta é Use LINQ para XML para obter fortemente digitado e formatado corretamente (x) html:

XDocument output = new XDocument();
XElement root = new XElement("div",
    new XAttribute("class", "root_item"));

XElement iconImage = new XElement("img",
    new XAttribute("src", ResolveUrl("~/image.gif")),
    new XAttribute("alt", "This is an image"));

XElement link = new XElement("a",
    new XAttribute("class", "link"),
    new XAttribute("href", "http://google.com"),
    new XText("Link to Google"));


root.Add(link);
root.Add(iconImage);
output.Add(root);

Gosto porque é como os controles fortemente digitados no Webforms, onde você pode recompensar um botão e adicioná-lo à coleta de controle de outro controle.

Existem problemas ou limitações aparentes nisso?

Foi útil?

Solução

Posso pensar em dois problemas no método acima mencionado. Primeiro,

XElement iconImage = new XElement("img",
new XAttribute("src", ResolveUrl("~/image.gif")),
new XAttribute("alt", "This is an image"));

Referindo -se ao que você escreve acima, podemos ter algo como:

<img src=<%=whatever%> alt=<%=whatever%> />

Isso pode ser um julgamento pessoal ou o quê, mas certamente voto mais tarde, mais "humano". Certo, usando o Linq 2 XML pode se livrar do estranho < %} %> que vagando nas minhas páginas ASPX, mas, ao mesmo tempo, você faz com que esses "bons meninos" pareçam desajeitados.

O segundo pode vir com a questão do desempenho. Eu acho que analisar e executar o LINQ 2 XML pode ser bastante lento, embora eu não tenha nenhum dado sobre isso.

Pessoalmente, ainda estou experimentando a estrutura do MVC, parece voltar aos velhos tempos como ASP ou PHP 3.x, já que quase todas as peças interativas são tratadas explicitamente, em vez da estrutura de rede do ASP DOT orientada a janela/GUII. Eu acho que a principal razão pela qual usarei o MVC é que ele pode garantir os códigos HTML do lado do cliente da melhor qualidade.

Outras dicas

Esta é uma ótima idéia! O único problema que vejo com ele é o uso de C#. ;) O VB.NET tem um suporte muito melhor para a produção de XML por meio do recurso XML Literais.

O código que você liste em sua pergunta pode ser escrito assim no vb.net. (Com a adição do texto "Este é um link" Como seu exemplo não continha nenhum texto dentro do a elemento.)

Dim root = <div class="root_item">
               <img src=<%= ResolveUrl("~/image.gif") %> alt="This is an image"/>
               <a class="link" href="http://google.com">This is a link</a>
           </div>

Ainda há <%= ... %> Tags, mas são verificadas quanto à validade no momento da compilação. Se esse código for feito o valor de retorno de uma função que retornou o tipo XElement, esse snippet xhtml poderá ser reutilizado em outros lugares do site.

Eu tenho um projeto no codeplex que usa os literais vb.net XML como um mecanismo de exibição de MVC ASP.NET personalizado em http://vbmvc.codeplex.com. É baseado em código por Dmitry Robsman, que é gerente de unidade de produto do ASP.NET na Microsoft. As visualizações são as classes VB.NET e as páginas mestre são classes base. Você New-up As classes de visualização parcial em vez de referenciá -las por uma string de nome, de modo que também é uma verificação de tempo de compilação adicional. Em vez da classe HtmlHelper, que retorna strings, há uma classe XHTMLHELPER que retorna o XElement e funciona de maneira semelhante ao que você propôs.

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