2009-05-19 53 views
6

在過去幾年使用Seaside後,我發現模板系統是一種不好的代碼味道。是否有.net框架使用類似於海邊畫布系統生成html,css和javascript?或者避免我在模板中找到的重複。.NET的HTML生成器?

[編輯] NHaml不來接近我要找的。重點不在於(X)HTML的簡寫,而是使用編程語言來重構和重用代碼。

在海邊,它可能是這樣的:(畫布是HTML [和javascript]的建造者)

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

在這種方法中,我叫兩個子程序

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

第一一個身邊召喚一個選擇表單元素的裝飾:

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

這使得消除幾乎所有duplicati上。

回答

4

我對模板系統類似的感受(見ASP.MVC: Implementing a non-templated view engine?),並嘗試了一點後,我採取了以下做法:

  • 實現不直接寫入流的流暢HTML生成C#類,而是將整個HTML頁面構造爲內存中的對象層次結構。
  • 較高級別(可重複使用的)的HTML代碼(如複雜的輸入控件等)片實現爲單獨的類,並插入作爲節點到該層次結構中,並能自動擴大自己變成純HTML節點。
  • MVC視圖是其然後構造HTML層次結構,並將其寫入伸到響應流POCO C#類。

一些好處(從我的角度):

  • 您仍然會保留對HTML
  • 可重用性,繼承,封裝控制...
  • 結果是自動格式化(縮進,XHTML等)
  • 最棒的......使用獨立的DSL沒有模板腳本。
3

有一些相關的東西 - SharpDOM - 它是基於C#的內部DSL。你可以在ASP.NET MVC以及它之外使用它。 現在它只支持生成HTML,下一個版本也會有CSS支持。

+0

是的,這聽起來像是正確的方法。你之前用過Seaside,還是隻是常識:) – 2010-11-17 08:53:03