如何识别旧.NET应用中的.st字符串模板语法?
StringTemplate(.NET MVC视图.st文件)语法解析与中文速查
一、模板类型确认
你维护的.st文件是StringTemplate模板,这是一款主打逻辑与视图分离的模板引擎,曾在早期.NET MVC项目中替代Razor(.cshtml)作为视图层实现。
二、代码片段语法拆解
原始代码片段
<input id="unique-id" type="hidden" value="$model.UniqueId$" name="uniqueId" /> <input id="id" type="hidden" value="$model.Id$" name="form.Id" /> <input id="version" type="hidden" name="form.Version" value="$model.Version; format="0"$" /> <input id="this-type" type="hidden" value="$model.ItemType.Value$" /> <input type="hidden" name="form.CurrencyConversionFactor" value="$model.CurrencyConversionFactor$" $disabled$ />
关键语法点
- 变量插值:用
$变量名$包裹,比如$model.UniqueId$,渲染时直接替换为模型对应属性值 - 格式化指令:通过
; format="格式串"格式化变量,$model.Version; format="0"$表示把Version格式化为无小数位的整数 - 动态属性控制:
$disabled$属于动态标记,会直接输出变量内容(通常是disabled="disabled"或空串,用来控制元素是否禁用)
三、StringTemplate核心语法中文速查
基础用法
- 变量引用:
$var$- 插入变量值,变量为空/Null时不输出内容 - 属性链式访问:
$obj.subObj.prop$- 支持多层对象属性调用 - 集合遍历:
$items:{item | <span>$item.name$</span>}$- 遍历集合items,对每个元素item执行模板片段 - 模板复用:
$include(templateName)$- 引入其他.st模板文件
内置函数/指令
- strip:
$str; strip$- 去除字符串首尾空白 - rest:
$list; rest$- 获取集合中除第一个元素外的所有元素 - format:
$num; format="0.00"$- 格式化数字、日期,兼容标准.NET格式化字符串 - upper:
$str; upper$- 字符串转大写 - lower:
$str; lower$- 字符串转小写
逻辑控制说明
StringTemplate严格要求逻辑与视图分离,无直接if/else语法,需通过以下方式实现逻辑控制:
- 非空渲染:仅当变量存在时输出
$var$,不存在则跳过 - 集合非空判断:
$items:{item | <li>$item$</li>}$- 仅当items非空时渲染列表项
特殊符号转义
- 若要输出
$符号,需写为$$
四、向新框架迁移的关键映射
- 变量插值:
$model.UniqueId$→ Razor的@Model.UniqueId - 格式化:
$model.Version; format="0"$→@Model.Version.ToString("0")或@string.Format("{0:0}", Model.Version) - 动态属性:
$disabled$→@(Model.IsDisabled ? "disabled=\"disabled\"" : "") - 集合遍历:
$items:{item | <li>$item$</li>}$→@foreach(var item in Model.Items) { <li>@item</li> }
内容的提问来源于stack exchange,提问作者ZerefSan
相关产品推荐
相关产品推荐

