2009-05-19 19 views
6

Al haber usado Seaside en los últimos años, he encontrado que los sistemas de plantillas son un mal olor a código. ¿Existe un marco para .net que use algo similar al sistema de lienzo Seaside para generar html, css y javascript? O bien, una forma de evitar la duplicación que suelo encontrar en las plantillas.¿Generador de HTML para .NET?

[Editar] NHaml no se acerca a lo que estoy buscando. El punto no es tener una abreviatura de (X) HTML, sino tener un lenguaje de programación en el que pueda refactorizar y reutilizar el código.

En Mar, que podría tener este aspecto: (el lienzo es el constructor de HTML [y javascript])

renderContentOn: canvas 
    canvas form 
     class: 'eventEditor'; 
     with:[ 
      self renderWhoOn: canvas; 
       renderButtonsOn: canvas] 

En este método, llamo a dos subrutinas

renderWhoOn: canvas 
self decorateDivAndLabel: 'Who' on: canvas around: [ 
    canvas select 
     id: tagId; 
     selected: model who; 
     list: model whoList; 
     callback: [:value | model who: value]] 

La primera uno llama a un decorador en torno a un elemento de formulario seleccionado:

decorateDivAndLabel: aString on: canvas around: aBlock 
canvas div: [ 
    canvas label 
     for: (tagId := canvas nextId); 
     with: aString,':'. 
    aBlock value] 

Esto permite eliminar casi todos los duplicados en.

Respuesta

4

tengo sentimientos similares acerca de sistemas de plantilla (véase ASP.MVC: Implementing a non-templated view engine?), y después de experimentar un poco, tomó el siguiente enfoque:

  • Implementado un generador de HTML fluidez C# clase que no escribe directamente a un arroyo, en su lugar, construye toda la página HTML como una jerarquía de objetos en memoria.
  • Las piezas de código HTML de nivel superior (como controles de entrada complejos, etc.) se implementan como clases separadas y se insertan como nodos en esta jerarquía, y pueden expandirse automáticamente en nodos HTML.
  • MVC Views son entonces clases POCO C# que construyen la jerarquía HTML y la escriben en la secuencia de respuesta.

Algunos de los beneficios (desde mi punto de vista):

  • Puedes conservar el control sobre HTML
  • reutilización, herencia, encapsulación ...
  • El resultado es auto-formato (guiones , XHTML, etc.)
  • Y lo mejor de todo ... no hay scripts de plantillas usando una DSL separada.
3

Hay algo relacionado - SharpDOM - es DSL interno basado en C#. Puede usarlo con ASP.NET MVC y fuera de él. Ahora solo admite generación de HTML, la próxima versión también tendrá compatibilidad con CSS.

+0

Sí, esto suena como el enfoque correcto. ¿Usaste Seaside antes, o simplemente sentido común? –