我已经接管了一个能够打印信息的C#(2.0)代码库.执行此操作的代码非常繁琐.元素被绘制到每个页面上,魔术常量代表定位.我想程序员坐着一把尺子,通过测量和输入位置来设计每一页.是的,人们当然可以提出一些很好的抽象来使这种方法合理化.但我正在寻找一种不同的方法.
我的想法是,我将用生成静态HTML页面的代码替换当前打印的代码,将它们保存到文件中,然后在该文件上启动Web浏览器.最明显的好处是我不需要处理格式化 - 我可以让网络浏览器使用标签和CSS为我做这件事.
所以我要找的是一组非常轻量级的类,我可以用来帮助生成HTML.我不需要像HTMLTextWriter那样重量级的东西.我正在寻找的是避免像这样的碎片:
String.Format("<tr><td>{0}</td><td>{1}</td></tr>", foo, bar);
Run Code Online (Sandbox Code Playgroud)
而是采取这种感觉:
...
table().
tr().
td(foo).
td(bar)
Run Code Online (Sandbox Code Playgroud)
或类似的东西.我见过其他语言的轻量级类,但是找不到C#的等价(或更好).我当然可以自己写,但我坚信不要重新发明轮子.
知道这样的事吗?知道什么比这更好吗?
只是一个想法:为什么要在应用程序代码中组装 HTML?对我来说听起来有点乏味。您可以聚合报告所需的数据,并将其传递给 C# 现有的模板引擎(“通常”用于 Web 应用程序)之一。然后将模板引擎的结果保存到 html 文件中。
我认为这种方法的主要好处是:
我还没用过,但听说 Spark View Engine 还可以: http: //sparkviewengine.com/(但不确定是否适用于 C# 2.0)
不久前,我(在 PHP 中)尝试使用 Gagawa ( http://code.google.com/p/gakawa/ ),您可以在其中执行以下操作:
$div = new Div();
$div->setId("mydiv")->setCSSClass("myclass");
$link = new A();
$link->setHref("http://www.example.com")->setTarget("_blank");
$div->appendChild( $link );
Run Code Online (Sandbox Code Playgroud)
但很快就放弃了这种方法,转而采用模板引擎。