如何安全地将 C# 列表通过 onclick 传递给 jQuery 方法
发布时间 - 2026-02-01 00:00:00 点击率:次本文讲解如何在 asp.net razor 页面中,将 c# 对象(如 list)序列化为 json 并安全注入 html 的 onclick 属性,避免因特殊字符(如 `/`、`*`、`-`、引号或反斜杠)导致 javascript 解析失败。
在 ASP.NET MVC 或 Razor Pages 中,常需将服务端数据(例如 List
实际运行时却容易报错——浏览器控制台可能提示 Uncaught SyntaxError: Unexpected token 或 JSON.parse: unexpected character。根本原因在于:@Json.Serialize() 生成的是纯 JSON 字符串(如 ["*abc/def-"]),但将其直接嵌入 HTML 属性值(尤其是双引号包裹的 onclick="...")中时,未对 JSON 内部的引号、反斜杠、换行等进行 HTML/JavaScript 上下文转义,导致 HTML 解析器或 JS 引擎提前截断或解析失败。
✅ 正确做法是:双重编码——先用 Json.Serialize() 转为 JSON 字符串,再用 HttpUtility.JavaScriptStringEncode() 对其进行 JavaScript 字符串安全转义,确保可安全嵌入 HTML 属性中。
✅ 推荐写法(Razor + C#)
⚠️ 注意:
- 必须使用 单引号 包裹 onclick 属性值(如 onclick='...'),否则双引号嵌套易冲突;
- 使用 @Html.Raw(...) 防止 Razor 自动 HTML 编码转义后的字符串(否则 " 等会破坏 JSON);
- HttpUtility.JavaScriptStringEncode() 会将 " → \"、\ → \\、换行 → \n 等,确保字符串在 JS 上下文中合法。
✅ 对应的 JavaScript 方法(无需 JSON.parse)
由于传入的已是合法 JavaScript 字面量(非 JSON 字符串),直接使用即可,无需 JSON.parse():
function nextSlide(question) {
// question 已是解析后的 JS 对象(如数组或对象),可直接使用
console.log(question); // e.g., ["*abc/def-"]
console.log(Array.isArray(question)); // true
}❌ 错误写法(会导致解析失败):
onclick="nextSlide(@Json.Serialize(@question))"
function nextSlide(question) {
var myList = JSON.parse(question); // ❌ TypeError: Cannot parse object as JSON
}? 补充说明
- 若 @qu
estion 是 List
,序列化后为 ["a","b/c","*def-"];经 JavaScriptStringEncode 后变为 "["a","b\/c","\*def-"]"(内部引号与斜杠已转义),最终被 JS 正确识别为数组字面量。 - 在 .NET 6+ 中,推荐使用 System.Text.Json.JsonSerializer.Serialize() 配合 Microsoft.AspNetCore.Mvc.Rendering.HtmlHelper 扩展方法,但 HttpUtility.JavaScriptStringEncode 仍是兼容性最佳的选择。
- 更现代的替代方案(推荐长期采用):将数据预埋在 data-* 属性或
总之,安全传递服务端数据的关键在于:序列化 + 上下文转义 + 正确引用方式。一次配置,彻底规避因特殊字符引发的静默失败。
# javascript
# java
# jquery
# html
# js
# 前端
# json
# 编码
# 浏览器
# app
# microsoft
# mvc
# String
# Token
# 字符串
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Swift中swift中的switch 语句
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解
如何彻底卸载建站之星软件?
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
重庆市网站制作公司,重庆招聘网站哪个好?
开心动漫网站制作软件下载,十分开心动画为何停播?
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】
微信小程序 配置文件详细介绍
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
个人摄影网站制作流程,摄影爱好者都去什么网站?
如何在服务器上配置二级域名建站?
怎么用AI帮你为初创公司进行市场定位分析?
微信小程序 五星评分(包括半颗星评分)实例代码
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
Laravel如何使用Service Container和依赖注入?(代码示例)
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
Laravel如何使用.env文件管理环境变量?(最佳实践)
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
,网页ppt怎么弄成自己的ppt?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
轻松掌握MySQL函数中的last_insert_id()
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
nginx修改上传文件大小限制的方法
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
Laravel怎么判断请求类型_Laravel Request isMethod用法
Laravel如何使用withoutEvents方法临时禁用模型事件
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
Laravel Session怎么存储_Laravel Session驱动配置详解
Laravel如何配置Horizon来管理队列?(安装和使用)
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)
Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】
网站制作免费,什么网站能看正片电影?
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
微信小程序 scroll-view组件实现列表页实例代码
佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
Laravel如何创建自定义Facades?(详细步骤)
Laravel如何构建RESTful API_Laravel标准化API接口开发指南
HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】
如何确保西部建站助手FTP传输的安全性?
实例解析Array和String方法
Laravel如何实现一对一模型关联?(Eloquent示例)
Laravel如何与Pusher实现实时通信?(WebSocket示例)
Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南


