代码之家  ›  专栏  ›  技术社区  ›  Stephan Eggermont

用于.NET的HTML生成器?

  •  7
  • Stephan Eggermont  · 技术社区  · 15 年前

    在过去的几年里,我使用Seaside,发现模板系统是一种糟糕的代码味道。有没有一个.NET框架使用类似于Seaside Canvas系统的东西来生成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]]
    

    第一个调用围绕select form元素的decorator:

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

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

    3 回复  |  直到 14 年前
        1
  •  5
  •   Community Mr_and_Mrs_D    7 年前

    我对模板系统也有类似的感觉(参见 ASP.MVC: Implementing a non-templated view engine? ,在做了一点实验后,我采取了以下方法:

    • 实现了一个Fluent HTML生成器C类,该类不直接写入流,而是将整个HTML页构造为内存中的对象层次结构。
    • 更高级别(可重用)的HTML代码(如复杂的输入控件等)作为单独的类实现,并作为节点插入到此层次结构中,并且可以自动扩展为普通的HTML节点。
    • MVC视图随后是poco c类,这些类构造HTML层次结构并将其写入响应流中。

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

    • 您仍然保留对HTML的控制权
    • 可重用性、继承性、封装性…
    • 结果是自动格式化的(缩进、XHTML等)
    • 最重要的是…没有使用单独DSL的模板脚本。
        2
  •  3
  •   vtimashkov    14 年前

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

        3
  •  1
  •   D'Arcy Rittich    15 年前

    我不熟悉海滨,但你可以用 many different view engines 使用ASP.NET MVC,例如, NHaml . 也许你可以评估一下,看看是否有一个适合你的需求。

    你也可以 create your own view engine .