You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何识别旧.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 10:20:31