razor生成html,使用Razor视图引擎来生成邮件内容

本文介绍了如何利用ASP.NET MVC中的Razor视图引擎来创建和维护邮件模板,通过定义IViewRenderService接口及其实现ViewRenderService类,实现了从cshtml模板动态生成邮件内容。这种方式提高了代码的可读性和维护性,简化了邮件内容的生成过程。
摘要由CSDN通过智能技术生成

邮件的内容其实是就HTML,传统的做法都是通过在程序中拼接字符串来生成邮件的内容,生成困难,维护也困难。Razor是MVC里面使用的视图引擎,用来生成HTML非常方便,ZKEACMS中就是使用了Razor视图引擎,用cshtml作为邮件模板来生成邮件内容。这样很方便维护和修改。

定义接口 IViewRenderService

接口中定义了两个方法,第一个是视图中没有使用ViewModel,直接传入视图路径就可以了。第二个是视图中有作用ViewModel,传入视图路径和ViewModel对象就可以。

namespace Easy.Mvc.RazorPages

{

public interface IViewRenderService

{

string Render(string viewPath);

string Render(string viewPath, Model model);

}

}

接口实现 ViewRenderService

实现的方式也比较简单,主要还是直接使用了RazorViewEngine:

namespace Easy.Mvc.RazorPages

{

public class ViewRenderService : IViewRenderService

{

private readonly IRazorViewEngine _viewEngine;

private readonly ITempDataProvider _tempDataProvider;

private readonly IServiceProvider _serviceProvider;

public ViewRenderService(IRazorViewEngine viewEngine, ITempDataProvider tempDataProvider,

IServiceProvider serviceProvider)

{

_viewEngine = viewEngine;

_tempDataProvider = tempDataProvider;

_serviceProvider = serviceProvider;

}

public string Render(string viewPath)

{

return Render(viewPath, string.Empty);

}

public string Render(string viewPath, TModel model)

{

var httpContext = new DefaultHttpContext { RequestServices = _serviceProvider };

var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());

var viewResult = _viewEngine.GetView(null, viewPath, false);

if (!viewResult.Success)

{

throw new InvalidOperationException($"找不到视图模板 {viewPath}");

}

var viewDictionary = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary())

{

Model = model

};

using (var writer = new StringWriter())

{

var viewContext = new ViewContext(

actionContext,

viewResult.View,

viewDictionary,

new TempDataDictionary(actionContext.HttpContext, _tempDataProvider),

writer,

new HtmlHelperOptions()

);

var render = viewResult.View.RenderAsync(viewContext);

render.Wait();

return writer.ToString();

}

}

}

}

使用

使用的方法也很简单,首先要先建一个邮件模板,例如 ResetPassword.cshtml

c7a3f24472790bff3690bca54ba4e11a.png

代码如下:

@model ZKEACMS.Notification.ViewModels.ResetPasswordViewModel

重置密码

您正在重置密码,

您可以使用以下链接来重置您的密码,为了安全,该链接仅会在一段时间内有效,请尽快重置密码

@Model.Link

ZKEASOFT

http://www.zkea.net

@DateTime.Now.ToString("yyyy-MM-dd")

接下来就是调用ViewRenderService

var htmlContent = _viewRenderService.Render("~/EmailTemplates/ResetPassword.cshtml", new ResetPasswordViewModel{Link=...});

有了内容以后,就可以直接调用发送了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值