使用.NET应用程序中的模板生成HTML

Mar*_*ath 9 .net html c# template-engine

我有一个.NET控制台应用程序,需要生成一些HTML文件.我可以在StringBuilder中构建HTML并将内容写入文件,但我认为使用某种带有占位符的模板文件可以更好地处理数据,然后在运行时通过它处理我的数据.

我猜有很多方法可以使用aspx,或者T4,或者一些可以与ASP.NET MVC一起使用的替代视图引擎,但我不知道最简单的方法是集成到控制台应用程序中(或者如何我会去整合它们).

我想最终能够调用以下形式:

 GenerateHtml(htmlPath, template, customDataObject);
Run Code Online (Sandbox Code Playgroud)

Kev*_*Kev 14

您可以这样做的一种方法是创建一个XSL文件作为模板,将您customDataObject作为XML 序列化,然后执行转换以生成所需的HTML.

更新:虽然我喜欢(并且确实使用)其他人提倡的字符串替换方法,但使用XML/XSL有一定的灵活性.假设您的对象具有列表属性,例如具有行项目对象列表的订单对象,您几乎必须将必须呈现订单项的逻辑刻录到您的代码中.

使用XSL,您只需将序列化订单对象XML传递给XSL,并让XSL处理生成所需的任何HTML.这意味着您可以经常编辑XSL或具有变体(订单摘要,详细订单等),而无需为您的应用添加额外的代码,而且还有额外的重建/部署麻烦.

但是这一切都取决于你需要渲染的复杂性,对于一些工作,字符串替换更明显,对于其他人来说XSL就是这样.正如我所说,我们同时使用两者.


Nat*_*ley 7

这里有一些代码说明了一种完成你想要做的事情的简单方法:

using System;
using System.IO;

public class HtmlTemplate
{
    private string _html;

    public HtmlTemplate(string templatePath)
    {
        using (var reader = new StreamReader(templatePath))
            _html = reader.ReadToEnd();
    }

    public string Render(object values)
    {
        string output = _html;
        foreach (var p in values.GetType().GetProperties())
            output = output.Replace("[" + p.Name + "]", (p.GetValue(values, null) as string) ?? string.Empty);
        return output;
    }
}

public class Program
{
    void Main()
    {
        var template = new HtmlTemplate(@"C:\MyTemplate.txt");
        var output = template.Render(new {
            TITLE = "My Web Page",
            METAKEYWORDS = "Keyword1, Keyword2, Keyword3",
            BODY = "Body content goes here",
            ETC = "etc"
        });
        Console.WriteLine(output);
    }
}
Run Code Online (Sandbox Code Playgroud)

使用这个,你所要做的就是创建一些HTML模板并用可替换的标记填充它们,如[TITLE],[METAKEYWORDS]等.然后传入包含值的匿名对象来替换标记.您还可以使用字典或类似的东西替换值对象.

  • 就像我说的,你可以使用字典而不是硬编码对象;这意味着如果您在编译时不知道您的字段将是什么,您可以拥有一个循环遍历的集合。 (2认同)

ADM*_*-IT 7

有很多 HTML 模板引擎/生成器。

根据您的需要选择任何一个即可。

祝你好运。

我的选择是斯克里班


Sco*_*ysk 3

正如 Matt 提到的,spark 很好,但对于一些简单的模板来说它可能有点大材小用,如果你不在 MVC 中使用它,它就会变得复杂。

我个人在 NVelocity 方面取得了很大的成功,我还发布了一个使用它的简单示例/包装器:http://simpable.com/code/simpletemplate/

此外,GraffitiCMS 的整个主题系统都在 NVelocity 上运行(尽管如果 Spark 可用于此任务,我会使用它)。

-斯科特

  • 嘿斯科特,如果这个页面上至少有一些指示就好了。显然该网站已关闭 (3认同)