用于.NET的HTML生成器?

Ste*_*ont 7 .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]
Run Code Online (Sandbox Code Playgroud)

在这个方法中,我调用了两个子程序

renderWhoOn: canvas
self decorateDivAndLabel: 'Who' on: canvas around: [
    canvas select
        id: tagId;
        selected: model who;
        list: model whoList;
        callback: [:value | model who: value]]
Run Code Online (Sandbox Code Playgroud)

第一个调用选择表单元素周围的装饰器:

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

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

Igo*_*ejc 6

我对模板系统有类似的感受(参见ASP.MVC:实现非模板化的视图引擎?),经过一些实验,我采用了以下方法:

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

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

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