C# Razor页面中如何渲染带双引号、逗号分隔的字符串列表?
问题根源
原有Razor循环的输出逻辑缺了两个关键格式:
- 没有给每个数组元素加上JS字符串必需的双引号包裹
- 元素之间没有输出逗号分隔
最终所有字符串值直接拼接成一整串无格式文本,完全不符合JS数组的语法要求。
实现方案
优先推荐用string.Join的写法,不需要手动维护循环分隔符,代码简洁且不会出现冗余的尾逗号问题:
labels: [@string.Join(",", new string[]{"ONE","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE","TEN"}.Select(x => $"\"{x}\""))]
代码执行逻辑:
- 遍历原有字符串数组,给每个元素外层套上双引号,生成"ONE"、"TWO"这类符合JS字符串语法的片段
- 用逗号把所有处理好的片段拼接成连续字符串,直接填充到labels数组的方括号内
- 最终页面输出的内容完全匹配要求的
"ONE","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE","TEN"格式
如果习惯用循环实现,需要在循环内补全格式,用@:标记需要直接输出的字面JS字符,避免Razor解析报错,同时手动判断是否需要输出元素间的逗号,避免产生冗余尾逗号:
labels: [ @{ var labels = new string[]{"ONE","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE","TEN"}; for (int i = 0; i < labels.Length; i++) { @:"\"@labels[i]\"" if (i < labels.Length - 1) { @:, } } } ]
注意:JS虽然兼容数组最后一个元素后的尾逗号,但手动循环实现时不做判断很容易生成这类冗余内容,string.Join的写法可以天然规避这个问题。
内容的提问来源于stack exchange,提问作者MADMAX
相关产品推荐
相关产品推荐

