首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从剃刀引擎(IRazorEngineService)获取ITemplate

如何从剃刀引擎(IRazorEngineService)获取ITemplate
EN

Stack Overflow用户
提问于 2015-12-21 21:12:12
回答 1查看 463关注 0票数 0

我刚刚将我们的RazorEngine参考更新到了版本3.7.5。一大堆东西似乎已经改变并过时了。对于大多数事情,我想出了“新方法”,除了一件事:获取一个ITemplate实例。

我们过去常常使用TemplateService实例。它有一个返回ITemplate实例的Resolve方法。

TemplateService已替换为IRazorEngineService。这没有任何返回ITemplate的方法。

检索的正确方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2015-12-22 20:22:52

正如我已经在一些帖子中讨论过的那样,这里引用了一些话:

您能详细说明为什么需要直接访问该接口的实例吗?我决定删除对它的直接访问,因为它不容易使用,而且大多数情况下并不像你认为的那样。如果您使用Isolation API,它也会导致问题。

https://github.com/Antaris/RazorEngine/issues/225

如果是关于设置自定义布局,正确的升级路径是使用自定义TemplateBase并使用ViewBag (如链接问题中所讨论的)。

另一个更有趣的用例是从模板中获取数据。这里详细讨论了这一点:https://github.com/Antaris/RazorEngine/issues/238

下面是一个关于如何从给定模板中获取“主题”的代码示例

模板:

代码语言:javascript
复制
@model HelloWorldModel
@{
    Layout = "CI";
    Subject = "Hello World";
}
Hello @Model.Name,<br/>
this is a test email...

代码(简化)

代码语言:javascript
复制
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实例实现什么目标……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34396523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档