2017-08-26 101 views
0

我想在C#中使用从here Engine.Razor lib的电子邮件生成模板。但我不明白他们的主要财产是什么? 按照文档我运行像这样Engine.Razor抛出异常使用相同的键多次使用

emailBody = Engine.Razor.RunCompile(emailBodyText, "SomeKey", null, new { SomeVariable = 3 }); 

它会生成一个名为“SomeKey”一些缓存的关键!我真的不需要这个!但是它在参数中是必需的。

但我遇到的问题是,我生成多个电子邮件后,我得到一个异常说,该密钥已经生成。所以,每次我生成一封电子邮件时,我是否会抛出一个独特的价值,或者我在这里错过了关于这个图书馆使用的东西?

旧文档说要使用.Parse(不需要密钥),但Visual Studio将其显示为已弃用!

string result = Razor.Parse(template, new { Name = "World" }); 

所以我很害怕使用这种方法,即使它工作!

回答

1

您没有继续阅读关于如何使用该库的其他文档或者错误地解释了RunCompileRun部分。从您链接的作者网站,步骤如下。

string template = "Hello @Model.Name, welcome to RazorEngine!"; 
var result = 
    Engine.Razor.RunCompile(template, "templateKey", null, new { Name = "World" }); 

这里使用的RunCompile方法是一个扩展方法,你需要 打开RazorEngine.Templating命名空间。

“templateKey”必须是唯一的,并且在运行上述示例 后,您可以使用此密钥重新运行缓存模板

// using RazorEngine.Templating; // Dont forget to include this. 
var result = 
    Engine.Razor.Run("templateKey", null, new { Name = "Max" }); 

注意,笔者运行了新的模型值模板接下来的时间,他呼吁Engine.Razor.Run。如果您再次拨打RunCompile,则需要另一个唯一密钥。

+0

这真是令人困惑!每次我生成电子邮件模板时,它都会与之前的不同。恩。我的用户登录可能会生成一封电子邮件,发送它,然后30秒后生成另一封电子邮件。此电子邮件将有不同的模型信息,所以我需要一个新的模板。所以如果我理解你的答案,我需要在每次使用RunCompile时使用templateKey名称中的唯一标识符?恩。 “templateKey”+ DateTime.Now.ToString() – user1186050

+0

缓存所有这些模板似乎有点浪费! – user1186050

+0

@ user1186050 - 不,您正在读取它不正确。这样想一想。您有一个新的用户电子邮件模板,它接受一个字符串模型(称之为名称)。你可以使用唯一的标识符和模型值来调用第一项“RunCompile”(可以说Tommy)。现在,下一次您必须使用*特定的电子邮件模板*时,可以使用*不同模型值*(可以说user1)调用第二个命令'.Run'。您为每个模板调用'RunCompile'一次且仅一次。从此之后,您可以在唯一的模板ID上使用不同的模型值调用'Run'。 – Tommy