23.3、Razor 视图引擎
强大的视图引擎给模板页面定制提供了可能性。
视图引擎
自.NET Framework开始,在ASP.NET MVC框架中就引入了 RazorEngine ,也就是视图引擎,通常我们的视图是采用 .cshtml 文件进行编写。
由于我们是前后端分离的 WebAPI 项目,所以并没有引入完整的 asp.net core mvc 框架,所以,今天在 Hoa 框架中集成 RazorEngine 功能
简单入门
非强类型
var templateText = @"Hello @Model.Name.";
var result = RazorEngineHelper.RunCompile(templateText, new { Name = "Hoa" }); // => Hello Hoa.由于编辑模板需要付出昂贵的性能代价,所以 Hoa 框架只在首次编译模板后就将模板缓存起来并生成 .dll文件。这样就无需担心后续性能问题了。
强类型模型
var templateText = @"Hello @Model.Name.";
var result = RazorEngineHelper.RunCompile<Model>(templateText, new Model{ Name = "Hoa" }); // => Hello Hoa.加载.cshtml文件
.cshtml文件// 非强类型
var cshtmlPath = "你的.cshtml完整路径";
var result = RazorEngineHelper.RunCompileViewPath(cshtmlPath, new { Name = "Hoa" }); // => Hello Hoa.
// 强类型
var result = RazorEngineHelper.RunCompileViewPath<Model>(cshtmlPath, new Model{ Name = "Hoa" }); // => Hello Hoa.高级入门
Hoa 内置的 Razor 视图引擎 支持完整的 ASP.NET Core 3.x 语法,比如
自定义方法
<area>
    @{ RecursionTest(3); }
</area>
@{
  void RecursionTest(int level)
  {
    if (level <= 0)
    {
        return;
    }
    <div>LEVEL: @level</div>
    @{ RecursionTest(level - 1); }
  }
}强类型方法调用
模板定义
Hello @A, @B, @Decorator(123)强类型模型
public class CustomModel
{
    public int A { get; set; }
    public string B { get; set; }
    public string Decorator(object value)
    {
        return "-=" + value + "=-";
    }
}编译模板
var result = RazorEngineHelper.RunCompile<CustomModel>(templateText, u => {
    u.A = 10,
    u.B = "Hoa"
});引入程序集
模板定义
@using System.IO
<div>@Model.Name</div>
<div>@Path.GetFullPath("~/Views/Home.cshtml")</div>编译模板
var result = RazorEngineHelper.RunCompile(templateText
                            , new { Name = "Hoa" }
                            ,typeof(System.IO.Path));更多关于RazorEngineCore 可查看官方文档。
最后更新于
这有帮助吗?