有谁知道如何将 C# ASP.NET 数组传递给 JavaScript 数组?示例代码也很好。
对不起,如果我之前含糊不清。这个问题其实很简单。为简单起见,让我们在我的aspx.cs
文件中声明:
int [] numbers = new int[5];
现在我想传递numbers
给客户端并在 JavaScript 中使用数组中的数据。我该怎么做?
有谁知道如何将 C# ASP.NET 数组传递给 JavaScript 数组?示例代码也很好。
对不起,如果我之前含糊不清。这个问题其实很简单。为简单起见,让我们在我的aspx.cs
文件中声明:
int [] numbers = new int[5];
现在我想传递numbers
给客户端并在 JavaScript 中使用数组中的数据。我该怎么做?
用System.Web.Script.Serialization.JavaScriptSerializer
类序列化它并分配给 javascript var
虚拟样本:
<% var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); %>
var jsVariable = <%= serializer.Serialize(array) %>;
这是为了补充zerkms的回答。
要跨语言障碍传递数据,您需要一种通过序列化数据将数据表示为字符串的方法。JavaScript 的序列化方法之一是 JSON。在 zerkms 的示例中,代码将放置在 aspx 页面内。要将他的示例和您的示例组合在一个 aspx 页面上,您应该:
<%
int[] numbers = new int[5];
// Fill up numbers...
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
%>
稍后在 aspx 页面的某个地方
<script type="text/javascript">
var jsVariable = <%= serializer.Serialize(numbers) %>;
</script>
不过,这个答案假设您是从初始页面加载生成 JavaScript。根据您帖子中的评论,这可以通过 AJAX 完成。在这种情况下,您可以让服务器以序列化的结果作为响应,然后使用您喜欢的框架在 JavaScript 中对其进行反序列化。
注意:也不要将此标记为答案,因为我希望语法突出显示以使另一个答案更清晰。
您可以使用 ClientScript.RegisterStartUpScript 将 javascript 注入到 Page_Load 上的页面中。
这是 MSDN 参考的链接:http : //msdn.microsoft.com/en-us/library/asz8zsxy.aspx
这是 Page_Load 中的代码:
List<string> tempString = new List<string>();
tempString.Add("Hello");
tempString.Add("World");
StringBuilder sb = new StringBuilder();
sb.Append("<script>");
sb.Append("var testArray = new Array;");
foreach(string str in tempString)
{
sb.Append("testArray.push('" + str + "');");
}
sb.Append("</script>");
ClientScript.RegisterStartupScript(this.GetType(), "TestArrayScript", sb.ToString());
注意:使用 StringBuilder 构建脚本字符串,因为它可能很长。
这是在您可以使用它之前检查注入的数组“testArray”的Javascript:
if (testArray)
{
// do something with testArray
}
这里有2个问题:
有些人认为这对 C# 注入 Javascript 具有侵入性
我们必须在全局上下文中声明数组
如果您不能忍受,另一种方法是让 C# 代码将数组保存到视图状态,然后让 JavaScript 使用 PageMethods(或 Web 服务)回调服务器以获取该视图状态对象作为大批。但我认为对于这样的事情来说,这可能有点矫枉过正。
在页面文件中:
<script type="text/javascript">
var a = eval('[<% =string.Join(", ", numbers) %>]');
</script>
而在后面的代码中:
public int[] numbers = WhatEverGetTheArray();
对于对象数组:
var array= JSON.parse('@Newtonsoft.Json.JsonConvert.SerializeObject(numbers)'.replace(/"/g, "\""));
对于 int 数组:
var array= JSON.parse('@Newtonsoft.Json.JsonConvert.SerializeObject(numbers)');