我在 .NET 6 项目中使用 FluentEmail 库,它可以很好地完成我需要它做的大部分事情。
我有一个布局文件 _DefaultEmailLayout.cshtml,其中包含基本页眉和页脚,因此在我的模板文件 ForgotPassword.cshtml 之一中,我引用了此布局文件。
@model SharedLibrary.Models.Shared.EmailTemplate
@{
Layout = Model.LayoutLocation; //contains location of layout file
}
<tr>
<td class="mceBlockContainer" valign="top" style="background-color:#ffffff; padding-top:21px; padding-bottom:7px; padding-right:25px; padding-left:25px">
<div class="mceText" id="dataBlockId-40" style="width:100%">
<p class="last-child">
<strong>Your password</strong>
</p>
</div>
</td>
</tr>
<tr>
<td class="mceBlockContainer" valign="top" style="background-color:#ffffff; padding-top:7px; padding-bottom:40px; padding-right:25px; padding-left:25px">
<div class="mceText" id="dataBlockId-25" style="width:100%">
<p>Hi @Model.FirstName,</p>
</div>
</td>
</tr>
<tr>
<td class="mceBlockContainer" valign="top" style="background-color:#ffffff; padding-top:21px; padding-bottom:7px; padding-right:25px; padding-left:25px">
<div class="mceText" id="dataBlockId-40" style="width:100%">
<p class="last-child">
<strong>Need Help?</strong>
</p>
</div>
</td>
</tr>
<tr>
<td class="mceBlockContainer" valign="top" style="background-color:#ffffff; padding-top:7px; padding-bottom:40px; padding-right:25px; padding-left:25px">
<div class="mceText" id="dataBlockId-25" style="width:100%">
<p>
</p>
<p class="last-child">
If you need any assistance, our Client Support Team are here to help. Feel free to reach out to our team via email on XXX
</p>
</div>
</td>
</tr>
在代码本身中,当我使用 FluentEmail.UsingTemplateFromFile().SendAsync() 时,它成功发送电子邮件,并且收到的电子邮件看起来与布局文件页眉和页脚符合预期。
我遇到的问题是,我的一些电子邮件共享您在 ForgotPassword.cshtml 文件中看到的“需要帮助”部分,因此我没有将其复制到所有这些文件中,而是将其放置在一个名为的单独文件中_NeedHelpLayout.cshtml
现在,如果我用下面的内容替换 ForgotPassword.cshtml 中的该部分,那么当电子邮件发送时,该部分不仅不会被解析,而且无法在任何地方找到,电子邮件模板只是不包含它。我在这里做错了什么吗?
<partial name="xxx" />
如果您在 FluentMail 中使用 Razor 渲染器,则模板渲染器是 RazorLight 引擎而不是 MS Razor 引擎。这意味着部分标记将被忽略。相反,请使用 RazorLight 引擎中的 IncludeAsync 方法(有关详细信息,请参阅 RazorLight 文档)。 在模板文件中:
添加在顶部
@using RazorLight
哪里应该是部分标签,把这个:
@{ await IncludeAsync("path_to_the_partial_view.cshtml", Model);}