我有一个模拟cshtml
,看起来像这样:
@model TaskManager.Models.ViewModels.ProjectRaportViewModel
@{
var name = Model.Project.Name;
<h3>@name</h3>
}
<br />
<4h>Hello World!</4h>
我想以string
的形式返回该视图(或任何视图),但以html
呈现的Razor
的形式返回(因此,我认为剃刀会将C#
的内容更改为{{ 1}}标签等)。
我有一个html
,看起来像这样:
controller
在 [HttpGet("{projectId}")]
public IActionResult GetRaportFromProject([FromRoute] int projectId)
{
var html = this.pdfService.RenderViewToHtml(projectId);
return this.Content(html, "text/html", Encoding.UTF8);
}
中,我有这种方法:
pdfService
我的问题是,如何在服务类中由 public string RenderViewToHtml(int projectId)
{
this.projectService.GetItem(projectId);
var raportHtml = what to do next?
}
将cshtml
渲染到html
,然后从Razor
端点将其作为string
返回? >
答案 0 :(得分:2)
如果使用.Net Core,则可以轻松安装一个NuGet软件包:RazorEngine.NetCore
文档很好,但这是简短的版本:
包括库:
using RazorEngine;
using RazorEngine.Templating;
获取您的剃须刀html
string razorView= "Hello @Model.Name, welcome to RazorEngine!";
如果在文件中,则可以使用File.ReadAllText
string razorView = await File.ReadAllTextAsync(filePath);
并编译:
string result = Engine.Razor.RunCompile(razorView, "templateKey", null, null);
如果要注入一些对象,请将其传递给第4个参数