7

过去几年使用 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]

这允许消除几乎所有的重复。

4

2 回答 2

6

我对模板系统也有类似的感受(参见ASP.MVC:Implementing a non-templated view engine?),经过一番试验,我采取了以下做法:

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

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

  • 您仍然保留对 HTML 的控制权
  • 可重用性、继承性、封装性……
  • 结果是自动格式化的(缩进、XHTML 等)
  • 最重要的是......没有使用单独的 DSL 的模板脚本。
于 2009-05-23T04:14:50.387 回答
1

我对 Seaside 不熟悉,但您可以在 ASP.NET MVC 中使用许多不同的视图引擎,例如NHaml。也许您可以评估这些,看看是否适合您的需求。

您还可以创建自己的视图引擎

于 2009-05-19T17:00:46.953 回答