Pregunta

Ha habido muchas discusiones sobre View-engine para ASP.NET MVC y algunas críticas contra el " tag-soup " con for-loops y cosas por el estilo.

La alternativa o complemento ha sido utilizar HTML-helpers, que son solo llamadas a métodos en línea.

Cuando miro dentro de los HTML-helpers de ASP.NET MVC hoy están usando una clase llamada TagBuilder .

Mi propuesta es utilizar LINQ to XML para obtener un tipo y HTML (X) con formato correcto :

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);

Me gusta porque es como los controles fuertemente tipados en WebForms, donde puedes actualizar un botón y agregarlo a la colección de controles de otro control.

¿Hay algún problema o limitación aparente en esto?

¿Fue útil?

Solución

Puedo pensar en dos problemas para el método mencionado anteriormente. Primero,

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

Refiriéndose a lo que escribe arriba, podemos tener algo como:

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

Esto podría ser un juicio personal o qué, pero ciertamente voto el último más & "; humano &"; legible. Correcto, el uso de LINQ 2 XML puede eliminar el extraño & Lt;%}% & Gt; eso deambulando en mis páginas aspx, pero al mismo tiempo, haces esos & "; buenos chicos &"; se ve torpe.

El segundo podría venir con un problema de rendimiento. Creo que analizar y ejecutar LINQ 2 XML podría ser bastante lento, aunque no tengo ningún dato al respecto.

Personalmente, todavía estoy experimentando el marco MVC, me siento como volver a los viejos tiempos como ASP o PHP 3.X, ya que casi todas las partes interactivas se manejan explícitamente, en lugar de la ventana / ASP Dot Net orientada a GUI-OOP Marco de referencia. Creo que la razón principal por la que usaré MVC es que puede garantizar la mejor calidad de los códigos HTML del lado del cliente.

Otros consejos

¡Esta es una gran idea! El único problema que veo es el uso de C #. ;) VB.NET tiene un soporte mucho mejor para producir XML a través de su función de literales XML.

El código que enumera en su pregunta podría escribirse así en VB.NET. (Con la adición del texto & Quot; Este es un enlace & Quot; ya que su ejemplo no contenía ningún texto dentro del elemento a.)

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>

Todavía hay etiquetas <%= ... %>, pero se verifica su validez en tiempo de compilación. Si este código se convirtió en el valor de retorno de una función que devolvió el tipo XElement, entonces ese fragmento Xhtml podría reutilizarse en otro lugar del sitio.

Tengo un proyecto en CodePlex que usa VB.NET XML Literals como un motor ASP.NET MVC View personalizado en http: //vbmvc.codeplex.com . Se basa en el código de Dmitry Robsman , quien es el Gerente de Unidad de Producto para ASP.NET en Microsoft. Las vistas son clases de VB.NET y las páginas maestras son clases base. new-up Clases de vista parcial en lugar de hacer referencia a ellas por una cadena de nombre, por lo que también es una verificación de tiempo de compilación adicional. En lugar de la clase HtmlHelper, que devuelve cadenas, hay una clase XhtmlHelper que devuelve XElement y funciona de manera similar a lo que ha propuesto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top