用于.NET的HTML生成器?

时间:2009-05-19 16:49:47

标签: .net templates seaside

在过去的几年中我使用过Seaside,我发现模板系统的代码味道很差。是否有.net的框架使用类似于Seaside画布系统的东西来生成html,css和javascript?或者是一种避免重复的方法,我倾向于在模板中找到它。

[编辑] NHaml并不接近我正在寻找的东西。关键是没有(X)HTML的简写,但有一种编程语言,我可以在其中重构和重用代码。

在Seaside,它可能看起来像这样:(画布是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]

这样可以消除几乎所有重复。

3 个答案:

答案 0 :(得分:5)

我对模板系统有类似的感受(参见ASP.MVC: Implementing a non-templated view engine?),经过一些实验后,我采用了以下方法:

  • 实现了一个流畅的HTML生成器C#类,它不直接写入流,而是将整个HTML页面构造为内存中的对象层次结构。
  • 高级(可重用)HTML代码(如复杂的输入控件等)作为单独的类实现,并作为节点插入到此层次结构中,并可以自动扩展为纯HTML节点。
  • MVC视图是POCO C#类,它构造HTML层次结构并将其写入响应流。

一些好处(从我的角度来看):

  • 您仍然可以控制HTML
  • 可重用性,继承,封装......
  • 结果是自动格式化的(缩进,XHTML等)
  • 最重要的是......没有使用单独的DSL的模板脚本。

答案 1 :(得分:3)

有一些相关的东西 - SharpDOM - 它是基于C#的内部DSL。您可以将它与ASP.NET MVC一起使用,也可以在ASP.NET MVC之外使用它。 现在它只支持生成HTML,下一个版本也将支持CSS。

答案 2 :(得分:1)

我不熟悉Seaside,但您可以将many different view engines与ASP.NET MVC一起使用,例如NHaml。也许您可以评估这些,看看是否符合您的需求。

您也可以create your own view engine