我正在使用ActionMailer发送带有用户输入的电子邮件,如下所示:
这是我的MailController:
public EmailResult VerificationEmail(EmailModel model)
{
To.Add(model.To);
From = model.From;
Subject = model.Subject;
return Email("VerificationEmail", model);
}
这是我的EmailModel:
public string To { get; set; }
public string From { get; set; }
public string Subject { get; set; }
public string Body { get; set; }
这是我的VerificationEmail.txt.cshtml
@model ...Models.EmailModel
@Model.Body
这是我的EmailModel视图:
<div class="editor-field">
@Html.TextAreaFor(x => x.Body)
@Html.ValidationMessageFor(x => x.Body)
</div>
这可以按预期工作,用户可以修改电子邮件正文的内容并发送自定义电子邮件。但我想要实现的是让用户写下类似的内容:
你好。主题是:@ Model.Subject
..并在发送的电子邮件中查看正确的输出。例如,如果EmailModel.Subject是“Gimme一百万美元!”,那么发送的电子邮件将是 Hello。主题是:给我一百万美元!
我可以在“VerificationEmail.thx.cshtml”中执行此操作并查看正确的输出,但我希望能够直接在EmailModel View的textarea中执行此操作。
问题是:我该怎么做?
答案 0 :(得分:0)
我不知道如何在动作管理器中执行此操作,但我知道如何使用Nuget的RazorEngine项目来完成它。它会让你传入一个字符串模板。
RazorEngine.Razor.Compile(template, typeof(EmailModel), "EmailModel")
var result = RazorEngine.Razor.Run<EmailModel>(model, "EmailModel")
然后只需将结果作为电子邮件正文发送。
如果您让用户在textarea中创建自己的模板,这将是容易出错的,例如,如果他们在键入@model时输入大写错误。因此,如果您使用此方法,请确保将其包装在一些错误处理中。