ASP.NET后端数组传递到JavaScript出现System.String[]该如何解决
问题原因
直接在ASPX页面输出<%= myArray %>时,.NET会自动调用数组对象的ToString()方法,字符串数组的默认ToString()返回值是固定字符串System.String[]。你给onclick事件传参的时候还在外层套了单引号,最终传到JS函数里的就是"System.String[]"这个普通字符串,你取索引[1]自然得到的是字符串的第二个字符y,和你预期的数组完全无关。
实现方案
核心逻辑是把后端数组序列化为符合JS语法的JSON格式字符串,直接输出到前端即可被识别为原生JS数组:
- 后端改造:把数组序列化为JSON字符串,公开为页面可访问的公共变量
' 代码文件顶部导入序列化所需命名空间 Imports System.Web.Script.Serialization ' 原有数组定义 Public myArray (5) As String ' 新增公共JSON字符串变量 Public myArrayJson As String myArray(1) = "A1" myArray(2) = "A2" myArray(3) = "A3" myArray(4) = "A4" myArray(5) = "A5" ' 执行序列化 Dim jsSerializer As New JavaScriptSerializer() myArrayJson = jsSerializer.Serialize(myArray)
如果项目里已经引用了Newtonsoft.Json,也可以用它序列化,代码更简洁:
Imports Newtonsoft.Json ' 序列化代码替换为 myArrayJson = JsonConvert.SerializeObject(myArray)
- 前端页面改造:输出JSON字符串时不要外层加引号,JSON本身就是合法的JS字面量
<button type="button" onclick="myJava(<%= myArrayJson %>);">Search</button>
- JS代码无需修改,运行后
alert(myArray[1])即可得到预期的A1。
内容的提问来源于stack exchange,提问作者saljas
相关产品推荐
相关产品推荐

