Razor Pages中JavaScript排序函数失效:为何需给Model变量加引号
问题原因解析
问题核心在于Razor渲染逻辑与JavaScript语法的匹配问题:
当你写let currentColumn = @Model.column;时,Razor会在页面渲染阶段直接把@Model.column替换成模型里的实际字符串值。比如如果Model.column的值是"Title",渲染后的JavaScript代码会变成:
let currentColumn = Title;
在JavaScript里,没有引号包裹的Title会被当作未定义的变量,浏览器执行到这里会直接抛出ReferenceError,导致整个sortTable函数失效,所以点击表头没有任何反应。
而加上引号后let currentColumn = "@Model.column";,渲染后的代码是:
let currentColumn = "Title";
这时候"Title"是标准的JavaScript字符串字面量,变量赋值正确,后续的排序逻辑就能正常运行。
别被模型里的变量类型迷惑——Razor只是负责把服务器端的值原封不动输出到页面,它不会自动判断你要输出的是JS字符串还是其他类型,必须手动添加引号来符合JavaScript的语法规则,让引擎识别这是一个字符串值。
内容的提问来源于stack exchange,提问作者Aubrey
相关产品推荐
相关产品推荐

