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

如何正确使用string.Format格式化Eval?Repeater曲目编号对齐问题

解决Repeater控件中TrackNo格式化问题

我看到你在使用Repeater展示CD曲目时,想把int类型的TrackNo格式化成带前导零的两位数字(比如01、02...10),但添加格式化代码后出了问题。咱们来看看问题出在哪,以及怎么解决:

你的代码问题分析

你当前的代码:

<td><%(string.Format("{0:00}", #EVAL("TrackNo")) %>: <%#Eval("SongName") %></td>

有两个关键语法错误:

  1. 数据绑定表达式应该用<%#而非<%,<%是普通服务器代码块,无法在Repeater的绑定上下文里获取数据;
  2. #EVAL("TrackNo")里多了一个多余的#号,正确的写法是Eval("TrackNo")。

正确的解决方案

这里提供几种简单可靠的写法,你可以任选其一:

方案1:直接使用Eval的格式化参数(最简洁)

Eval方法本身支持传入格式化字符串作为第二个参数,直接就能实现需求:

<td><%# Eval("TrackNo", "{0:00}") %>: <%# Eval("SongName") %></td>

这个写法会自动把TrackNo(int类型)格式化为两位带前导零的字符串,比如1变成"01",10保持"10"。

方案2:显式转换类型后用string.Format

如果你想更明确地控制类型转换(比如避免潜在的类型转换异常),可以先把Eval返回的object转换成int,再格式化:

<td><%# string.Format("{0:00}", Convert.ToInt32(Eval("TrackNo"))) %>: <%# Eval("SongName") %></td>

如果TrackNo可能存在null值(比如数据源里允许空),可以再加个空值处理:

<td><%# string.Format("{0:00}", Eval("TrackNo") is int trackNo ? trackNo : 0) %>: <%# Eval("SongName") %></td>

为什么原来的代码失效?

在添加格式化之前,你应该是直接用<%# Eval("TrackNo") %>,这是正确的数据绑定表达式。但修改后错误地使用了<%标签,并且多写了#号,导致服务器无法正确解析数据绑定逻辑,所以就出问题了。

内容的提问来源于stack exchange,提问作者Johnny Bones

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:03:02