2009-05-19 12 views
6

Dopo aver usato Seaside negli ultimi anni, ho trovato che i sistemi di template erano un cattivo odore di codice. Esiste un framework per .net che utilizza qualcosa di simile al sistema canvas Seaside per generare html, css e javascript? Oppure un modo per evitare la duplicazione che tendo a trovare nei modelli.Generatore HTML per .NET?

[Modifica] NHaml non si avvicina a quello che sto cercando. Il punto non è avere una scorciatoia per (X) HTML, ma avere un linguaggio di programmazione in cui posso refactoring e riutilizzare il codice.

In riva al mare, potrebbe assomigliare a questo: (la tela è il costruttore di HTML [e javascript])

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

In questo metodo, che io chiamo due subroutine

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

La prima si chiama un decoratore attorno a un elemento del modulo selezionato:

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

Ciò consente di eliminare quasi tutti i duplicati sopra.

risposta

4

ho sentimenti simili riguardo sistemi di template (vedi ASP.MVC: Implementing a non-templated view engine?), e dopo aver sperimentato un po ', ho preso il seguente approccio:

  • Implementato un generatore HTML fluente classe C# che non scrivere direttamente a un ruscello, invece costruisce l'intera pagina HTML come una gerarchia di oggetti in memoria.
  • di livello superiore (riutilizzabili) pezzi di codice HTML (come controlli di input complessi etc.) sono implementati come classi separate e vengono inseriti come nodi in questa gerarchia, e si possono espandersi in nodi HTML strisciamento automaticamente.
  • MVC Visualizzazioni sono poi POCO classi C# che costruiscono la gerarchia HTML e lo scrive nel flusso di risposta.

Alcuni dei benefici (dal mio punto di vista):

  • È ancora mantenere il controllo su HTML
  • Riusabilità, ereditarietà, incapsulamento ...
  • Il risultato è Auto-formattato (trattini , XHTML ecc.)
  • E soprattutto ... nessun modello di script che utilizza un DSL separato.
3

C'è qualcosa di correlato - SharpDOM - è DSL interno basato su C#. Puoi usarlo con ASP.NET MVC e anche al di fuori di esso. Al momento supporta solo la generazione di HTML, la prossima versione avrà anche il supporto per CSS.

+0

Sì, questo sembra l'approccio giusto. Hai usato Seaside prima o solo buon senso :) –

Problemi correlati