Kendo Grid内联ItemTemplate报SyntaxError非法字符问题求助
排查Kendo Grid自定义筛选ItemTemplate语法错误的方法
我来帮你一步步拆解这个SyntaxError: illegal character的问题,核心是模板里的JavaScript语法和字符串拼接出了问题,咱们逐个排查:
1. 修复最直接的语法错误:赋值操作误用
你模板里写的StatusId = 1是赋值语句,而不是判断相等的条件——JavaScript里判断相等必须用==(宽松相等)或者===(严格相等)。这个错误会直接导致JS引擎解析失败,是触发报错的最可能原因。
2. 安全传递C#枚举值到客户端模板
你直接把C#枚举的ToString()结果拼进模板字符串里,如果枚举值包含空格、特殊字符,或者和模板的引号嵌套冲突,就会破坏语法结构。建议用@Html.Raw(Json.Encode(...))来自动转义枚举值,确保它在客户端被解析为合法的JavaScript字符串:
.Filterable(ftb => ftb.Multi(true) .ItemTemplate(@" #if (StatusId === 1) {# @Html.Raw(Json.Encode(Enums.PublicationStatus.New.ToString())) #}# // 可继续添加其他StatusId的判断分支 ") .CheckAll(false) .BindTo(new[] { // 确保数据源每个项都包含StatusId属性 new { StatusId = 1, Text = Enums.PublicationStatus.New.ToString() }, new { StatusId = 2, Text = Enums.PublicationStatus.Published.ToString() } }) )
3. 检查模板的引号嵌套与语法完整性
- 如果你用双引号包裹整个模板字符串,内部的字符串要改用单引号,或者反过来,避免提前闭合引号;
- 确保模板里的
#分隔符和JavaScript代码块(比如if的大括号)完全闭合,没有遗漏。
4. 排查隐藏的特殊字符
有时候复制粘贴的代码会带有不可见的全角空格、非标准字符,这些也会触发illegal character错误。你可以把模板里的JavaScript部分单独复制到浏览器控制台里测试,验证语法是否合法。
5. 验证BindTo的数据源结构
确保你BindTo里的每个对象都确实包含StatusId属性,且属性名大小写完全一致(JS是大小写敏感的)——虽然这不会直接导致语法错误,但会影响模板的最终渲染结果。
内容的提问来源于stack exchange,提问作者Kar
相关产品推荐
相关产品推荐

