前言

有些项目会需要让 end user 写模板 (rich text) 同时又需要做一些 data binding. 这几乎是 programmer 的工作了...

在 C#, 大可以使用 Razor Engine 来处理. 但是它对 end user 来说太 advance 了. 而且一般上 end user 只是想做简单的 data binding 和一些 simple 的 logic 而已.

于是就出现了许多比较简单的 template engine.

Template Engine Syntax

耳熟能详的有 EJS, handlebarsmustacheLiquid, 我觉得 React JSX 应该也可以算是一种吧.

EJS 的特点是 <% %> 符号, 它支持所以 js 语法.

handlebars 长这样

mustache, 它的特点是没有 if, for in 这些语法, 它用一些巧妙的招数来实现, 比如下面这个 if 逻辑, person 是一个 boolean

Liquid 是大名鼎鼎的电商系统 shopify 推出的.

npm tread 对比

比这个没有意思, 只是作为参考而已.

比语法的话, 我会倾向于 mustache 和 Liquid. 看上去舒服, end user 学起来也相对简单.

.NET Environment

市场怎样和 .NET 怎样是差很远的. 毕竟 .NET 是一个很冷门的东西. 外面世界总是美丽的.

.NET 有几款 template engine, 最多 star (1.7k) 的是 scriban. 其它的参考: Benchmarks

它虽然是自己的语法, 但是和 Liquid 非常相识, 而且也部分支持 Liquid 语法.

Get Started

安装

dotnet add package Scriban --version 5.0.0

对象 data binding

var template = Template.ParseLiquid("Hello {{ product.name }}!");
var result = template.Render(new { Product = new { Name = "Product 1" } });
Console.WriteLine(result);

if logic

var template = Template.Parse(@"
{{ if product.name == 'Product 1' }}
This is a variable with 1
{{ end }}
");
var result = template.Render(new { Product = new { Name = "Product 1" } });
Console.WriteLine(result.Trim());

其它的... TODO 等用到才补.

ASP.NET Core Library – scriban (Template Engine)的更多相关文章

  1. ASP.NET Core + Angular 2 Template for Visual Studio

    多个月以来,我和多个Github上的社区贡献者一起建立支持库.包,我们最终的目的是希望完成这样一个作为起点的模板,也就是基于把Typescript代码和Angular2宿主在ASP.NET Core项 ...

  2. [转]ASP.NET Core 1 Deploy to IIS

    本文转自: http://webmodelling.com/webbits/aspnet/aspnet-deploy-iis.aspx 15 Sep 2016. This tutorial will ...

  3. 《ASP.NET Core 高性能系列》致敬伟大的.NET斗士甲骨文!

    写在开始 三年前,曾写过一篇文章:从.NET和Java之争谈IT这个行业,当时遭到某些自认为懂得java就了不起的Javaer抨击, 现在可以致敬伟大的.NET斗士甲骨文了 (JDK8以上都需要收费, ...

  4. 探索ASP.Net Core 3.0系列二:聊聊ASP.Net Core 3.0 中的Startup.cs

    原文:探索ASP.Net Core 3.0系列二:聊聊ASP.Net Core 3.0 中的Startup.cs 前言:.NET Core 3.0 SDK包含比以前版本更多的现成模板. 在本文中,我将 ...

  5. ASP.NET CORE MVC 2.0 项目中引用第三方DLL报错的解决办法 - InvalidOperationException: Cannot find compilation library location for package

    目前在学习ASP.NET CORE MVC中,今天看到微软在ASP.NET CORE MVC 2.0中又恢复了允许开发人员引用第三方DLL程序集的功能,感到甚是高兴!于是我急忙写了个Demo想试试,我 ...

  6. Scaffolding Template on Asp.Net Core Razor Page

    Scaffolding Template Intro 我们知道在Asp.Net MVC中,如果你使用的EF的DBContext的话,你可以在vs中通过右键解决方案-添加控制器-添加包含视图的控制器,然 ...

  7. 基于 ASP.NET Core 2.1 的 Razor Class Library 实现自定义错误页面的公用类库

    注意:文中使用的是 razor pages ,建议使用 razor views ,使用 razor pages 有一个小坑,razor pages 会用到 {page} 路由参数,如果应用中也用到了这 ...

  8. ASP.NET Core and .NET Core Library Support

    ASP.NET Core and .NET Core Library Support 详情参见:https://github.com/linezero/NETCoreLibrary/blob/mast ...

  9. ASP.NET Core中的依赖注入(1):控制反转(IoC)

    ASP.NET Core在启动以及后续针对每个请求的处理过程中的各个环节都需要相应的组件提供相应的服务,为了方便对这些组件进行定制,ASP.NET通过定义接口的方式对它们进行了"标准化&qu ...

  10. Working with Data » 使用Visual Studio开发ASP.NET Core MVC and Entity Framework Core初学者教程

    原文地址:https://docs.asp.net/en/latest/data/ef-mvc/intro.html The Contoso University sample web applica ...

随机推荐

  1. 在Python中doc转docx,xls转xlsx,ppt转pptx(Windows)

    在Python中doc转docx,xls转xlsx,ppt转pptx(Windows) 说明: 首次发表日期:2024-07-18 参考pypi包: doc2docx 缘起 我们一般使用Python开 ...

  2. Python 标准类库-因特网数据处理之Base64数据编码

    该模块提供将二进制数据编码为可打印ASCII字符并将这种编码解码回二进制数据的功能.它为RFC 3548中指定的编码提供编码和解码功能.定义了Base16.Base32和Base64算法,以及事实上的 ...

  3. python virtualenv虚拟环境配置与使用

    python virtualenv虚拟环境配置与使用 By:赖富玉 QQ:1033553122 概述 python开发过程中,我们可能需要同时开发多款应用,这些应用可能公用同一个版本的Python程序 ...

  4. JavaScript 监听组合按键

    JavaScript监听组合按键   by:授客 QQ:1033553122 1.   思路 如图,通过监听并打印键盘keydown事件,得到图示内容,观察发现, 当按下的组合键包含Ctrl键时,ct ...

  5. RAG+AI工作流+Agent:LLM框架该如何选择,全面对比MaxKB、Dify、FastGPT、RagFlow、Anything-LLM,以及更多推荐

    RAG+AI工作流+Agent:LLM框架该如何选择,全面对比MaxKB.Dify.FastGPT.RagFlow.Anything-LLM,以及更多推荐 1.MaxKB MaxKB = Max Kn ...

  6. 【SpringBoot】14 数据访问P2 整合Druid数据源

    [SpringBoot引入Druid数据源] 在整合Jdbc的工程基础上加入这个依赖 并注册一个配置类即可 maven坐标: <!-- https://mvnrepository.com/art ...

  7. 大语言模型(LLM)的逻辑推理能力的例子 —— 以ChatGPT3.5为例

    例子: PS. 不得不说,这个表现虽然没有那么完美但是已经比较惊艳了,比传统的自然语言对话系列的表现高出很多呀,很神奇,这个LLM的逻辑能力是如何实现的呢?虽然LLM不具备逻辑推理能力,但是LLM确实 ...

  8. 深入学习JVM-JVM 安全点和安全区域

    什么是安全点? 在 JVM 中如何判断对象可以被回收 一文中,我们知道 HotSpot 虚拟机采取的是可达性分析算法.即通过 GC Roots 枚举判定待回收的对象. 那么,首先要找到哪些是 GC R ...

  9. Sentry 产品指南文档(附:详细脑图整理)

    Sentry 基础知识 https://docs.sentry.io/product/ https://docs.sentry.io/product/sentry-basics/ 问题 https:/ ...

  10. 位移运算符 1<<4

    转载自 https://www.cnblogs.com/ljangle/p/13036992.html 位运算 1 << 4   static final int DEFAULT_INIT ...