我刚刚将我们的RazorEngine参考更新到了版本3.7.5。一大堆东西似乎已经改变并过时了。对于大多数事情,我想出了“新方法”,除了一件事:获取一个ITemplate实例。
我们过去常常使用TemplateService实例。它有一个返回ITemplate实例的Resolve方法。
TemplateService已替换为IRazorEngineService。这没有任何返回ITemplate的方法。
检索的正确方法是什么?
发布于 2015-12-22 20:22:52
正如我已经在一些帖子中讨论过的那样,这里引用了一些话:
您能详细说明为什么需要直接访问该接口的实例吗?我决定删除对它的直接访问,因为它不容易使用,而且大多数情况下并不像你认为的那样。如果您使用Isolation API,它也会导致问题。
https://github.com/Antaris/RazorEngine/issues/225
如果是关于设置自定义布局,正确的升级路径是使用自定义TemplateBase并使用ViewBag (如链接问题中所讨论的)。
另一个更有趣的用例是从模板中获取数据。这里详细讨论了这一点:https://github.com/Antaris/RazorEngine/issues/238
下面是一个关于如何从给定模板中获取“主题”的代码示例
模板:
@model HelloWorldModel
@{
Layout = "CI";
Subject = "Hello World";
}
Hello @Model.Name,<br/>
this is a test email...代码(简化)
class CustomDataHolder {
public string Destination { get; set; }
public string Subject { get; set; }
}
// In the custom TemplateBase class:
public string Subject { get { return Viewbag.DataHolder.Subject; }; set { Viewbag.DataHolder.Subject = value; } }
// Your code
public static Task SendEmailAsync<T>(string templateName, string destination, T model)
{
var holder = new CustomDataHolder ();
dynamic viewbag = new DynamicViewBag();
viewbag.DataHolder = holder;
holder.Destination= destination;
var body = Engine.Razor.Run(templateName, typeof(T), model, (DynamicViewBag)viewbag);
MailMessage msg = new MailMessage();
msg.To.Add(new MailAddress(holder.Destination));
msg.Subject = holder.Subject;
msg.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(body, null, MediaTypeNames.Text.Html));
SmtpClient smtpClient = new SmtpClient();
return smtpClient.SendMailAsync(msg);
}希望这篇文章涵盖了你的用例。否则,请在您的问题中添加更多信息,说明您试图使用ITemplate实例实现什么目标……
https://stackoverflow.com/questions/34396523
复制相似问题