在过去的几年中我使用过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]
这样可以消除几乎所有重复。
答案 0 :(得分:5)
我对模板系统有类似的感受(参见ASP.MVC: Implementing a non-templated view engine?),经过一些实验后,我采用了以下方法:
一些好处(从我的角度来看):
答案 1 :(得分:3)
有一些相关的东西 - SharpDOM - 它是基于C#的内部DSL。您可以将它与ASP.NET MVC一起使用,也可以在ASP.NET MVC之外使用它。 现在它只支持生成HTML,下一个版本也将支持CSS。
答案 2 :(得分:1)
我不熟悉Seaside,但您可以将many different view engines与ASP.NET MVC一起使用,例如NHaml。也许您可以评估这些,看看是否符合您的需求。