【问题标题】:HTML generator for .NET?.NET 的 HTML 生成器?
【发布时间】:2010-10-27 09:36:31
【问题描述】:

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

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

【问题讨论】:

    标签: .net templates seaside


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      你也可以create your own view engine

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-08
        • 1970-01-01
        • 1970-01-01
        • 2010-11-22
        • 2011-01-02
        • 2010-09-26
        • 1970-01-01
        相关资源
        最近更新 更多