.net 開源模板引擎jntemplate 教程:基礎篇之語法
阿新 • • 發佈:2021-03-05
## 一、基本概念
上一篇我們簡單的介紹了jntemplate並寫了一個hello world(如果沒有看過的,[點選檢視](https://www.cnblogs.com/hnvvv/p/14476803.html)),本文將繼續介紹jntemplate的模板語法。
我們在講解語法前,首先要了解一下標籤的概念。在jntemplate中,標籤特指用來包含模板程式碼的語法塊,它是基本的呈現單元,在模板解析完成後,該語法塊將會被替換成具體的資料或者內容。
標籤通常使用`${`開頭,並且以`}`結尾,絕大部分標籤可以省略大括號進行簡寫,如`${model.UserName}` 可以簡寫為 `$model.UserName`
下面將重點介紹幾個常用的語法標籤:
> 注意:標籤的符號是可以自定義的,比如你可以自定義為`{{model.UserName}}` 或者`@{model.UserName}`,本文為了方便講解,僅以預設配置為準。
## 二、變數
用法:用於在模板中輸出一個變數,該變數可以是任何物件。如:`${var}`,可以簡寫為`$var`,其中`var` 為變數名,變數名只能是字母,下劃線與數字的組合,且必須以字母開頭。
**例:**
```csharp
var template = Engine.CreateTemplate(" !");
template.Set("model", new Site{ Title="jntemplate" });
template.Render(Console.Out);
```
如果訪問靜態屬性或欄位,需要通過`template.SetStaticType(...)`來指定靜態物件型別。
**例二:**
```csharp
var templateContent = "${DateTime.Now}";
var template = Engine.CreateTemplate(templateContent);
template.SetStaticType("DateTime", typeof(DateTime));
template.Render(Console.Out);
```
> ! 注意:當前版本暫時不支援匿名物件訪問。
## 四、索引
用法:用於訪問陣列或者`IList`及其它支援索引的物件,用法與`c#`類似,如`${arr[1]}`
**例:**
```csharp
var template = Engine.CreateTemplate("${arr[0]}");
template.SetStaticType("arr", new int[]{ 1,2,3});
template.Render(Console.Out);
```
## 五、函式方法
用法:用於呼叫物件例項方法,靜態方法,或者委託。如:`${func(p1,p2....) }`,可以簡寫為`$func(p1,p2....)`。
注意:方法必須是公開的(`public`),如果是私有的(`private`)則無法訪問。
**例一(例項方法):**
**Class1類**
```csharp
public class Class1
{
public int Add(int a,int b)
{
return a+b;
}
}
```
**模板程式碼:**
```csharp
var template = Engine.CreateTemplate("$obj.Add(1,2)");
template.Set("obj", new Class1());
template.Render(Console.Out);
```
**例二(靜態方法):**
```csharp
var templateContent = "${string.Concat(\"str1\",\"str2\")}";
var template = Engine.CreateTemplate(templateContent);
template.SetStaticType("string", typeof(string));
template.Render(Console.Out);
```
**例三(委託方法):**
```csharp
var template = Engine.CreateTemplate("$add(8,-2)");
template.Set>("add", (x, y) =>
{
return x + y;
});
template.Render(Console.Out);
```
## 六、邏輯判斷(IF)
用法:用於處理程式碼邏輯,等同於`c#`裡面的`if`與`else if `,支援以下邏輯運算子:`大於(>)`,`小於(<)`,`大於等於(>=)`,`小於等於(<=)`,`等於(==)`,`不等於(!=)`,`或者(||)`, `並且(&&)`。
**例一:**
模板:demo.html
```html
$if(id>0)
編號大於零
$elif(id==0)
編號等於零
$else
編號小於零
$end
```
後臺程式碼:
```csharp
var template = Engine.LoadTemplate(@"c:\demo.html");
template.Set("id",15);
template.Render(Console.Out);
```
> 注意:`else if` 可以寫作`$elseif` 也可以寫作 `$elif`。標籤必須以`$end`結束
## 七、列表迭代(Foreach)
用法:用來遍歷輸出一個列表,等同於`c#`中`foreach`,目標可以是陣列或者實現了`IEnumerable` 介面的任意物件.
**例一:**
模板:demo.html
```html
$foreach(model in list)
- github:
$title
!"); template.Set("title", "jntemplate"); template.Render(Console.Out); ``` ## 三、屬性與欄位 用法: 用於訪問物件屬性或者欄位,用法與`c#`類似,欄位與屬性必須是公開的(`public`),v2.0.0 中暫時不支援匿名物件的訪問。如:`${model.Name}`,可以簡寫為`$model.Name`. **例一:** ```csharp var template = Engine.CreateTemplate("$model.Title
- ${model.Title}