来自 Microsoft 的任何内置 html 模板打包器
Any in-built html template packager from microsoft
Razorengine 已被用作运行时 html 打包程序,但维护和支持似乎已停止一年。
我研究了一些,目前 Scriban 似乎是合适的人选。
但是,在将其放入解决方案之前,我想确定微软是否没有自己的库,而不是在维护第 3 方库时没有保证。
或者我是否可以只使用 razor 工作的最少必要功能来实现使用 razor 绑定创建 html 运行时?例如,通过添加一些引用..
如果您需要基于 ASP.NET Core
RazorEngine
创建模板服务,您可以通过 DI
获得所有需要的服务:
public TemplateService(IRazorViewEngine viewEngine, IServiceProvider serviceProvider, ITempDataProvider tempDataProvider)
{
_viewEngine = viewEngine;
_serviceProvider = serviceProvider;
_tempDataProvider = tempDataProvider;
}
在 DI
中注册 Startup
class:
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddScoped<ITemplateService, TemplateService>();
// ...
}
然后您可以通过将 ITemplateService
注入 Controller
class 或其他服务的构造函数来访问它。并使用 Views
和 ViewModels
使用 RenderTemplateAsync
方法生成 HTML
请参阅 implementation details here:
public async Task<string> RenderTemplateAsync<TViewModel>(string viewFilename, TViewModel viewModel)
{
// ... see the details by the link above
}
因此 Controller
中的调用可能如下所示:
var htmlContent = await _templateService.RenderTemplateAsync(
"Email/MyEmailTemplate",
new MyEmailTemplateModel
{
ToFullName = "Dmitry Pavlov",
Link = "https://whosebug.com/users/804385/dmitry-pavlov",
SenderName = "Software in healthcare / medical device",
CustomText = "Thanks for the tip! I have got it now. Appreciate your help!"
});
此 HTML
文本将渲染 View
的输出,模型绑定到 Razor
占位符,如此 View
中的 @Model.ToFullName。我猜你会为模板视图使用一些布局(我建议将所有需要的 CSS
样式嵌入其中 - 实际上你可以创建带有通用 HTML
标记的特殊 _EmailTemplateLayout
文件并指定这对于您所有的电子邮件模板都是 Layout
)。
Razorengine 已被用作运行时 html 打包程序,但维护和支持似乎已停止一年。
我研究了一些,目前 Scriban 似乎是合适的人选。 但是,在将其放入解决方案之前,我想确定微软是否没有自己的库,而不是在维护第 3 方库时没有保证。
或者我是否可以只使用 razor 工作的最少必要功能来实现使用 razor 绑定创建 html 运行时?例如,通过添加一些引用..
如果您需要基于 ASP.NET Core
RazorEngine
创建模板服务,您可以通过 DI
获得所有需要的服务:
public TemplateService(IRazorViewEngine viewEngine, IServiceProvider serviceProvider, ITempDataProvider tempDataProvider)
{
_viewEngine = viewEngine;
_serviceProvider = serviceProvider;
_tempDataProvider = tempDataProvider;
}
在 DI
中注册 Startup
class:
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddScoped<ITemplateService, TemplateService>();
// ...
}
然后您可以通过将 ITemplateService
注入 Controller
class 或其他服务的构造函数来访问它。并使用 Views
和 ViewModels
使用 RenderTemplateAsync
方法生成 HTML
请参阅 implementation details here:
public async Task<string> RenderTemplateAsync<TViewModel>(string viewFilename, TViewModel viewModel)
{
// ... see the details by the link above
}
因此 Controller
中的调用可能如下所示:
var htmlContent = await _templateService.RenderTemplateAsync(
"Email/MyEmailTemplate",
new MyEmailTemplateModel
{
ToFullName = "Dmitry Pavlov",
Link = "https://whosebug.com/users/804385/dmitry-pavlov",
SenderName = "Software in healthcare / medical device",
CustomText = "Thanks for the tip! I have got it now. Appreciate your help!"
});
此 HTML
文本将渲染 View
的输出,模型绑定到 Razor
占位符,如此 View
中的 @Model.ToFullName。我猜你会为模板视图使用一些布局(我建议将所有需要的 CSS
样式嵌入其中 - 实际上你可以创建带有通用 HTML
标记的特殊 _EmailTemplateLayout
文件并指定这对于您所有的电子邮件模板都是 Layout
)。