loc*_*boy 36 javascript c# asp.net
有谁知道如何将C#ASP.NET数组传递给JavaScript数组?示例代码也很不错.
对不起,如果我早先模糊的话.问题其实很简单.让我们说简单,在我的aspx.cs文件中我声明:
int [] numbers = new int[5];
Run Code Online (Sandbox Code Playgroud)
现在我想传递numbers给客户端并在JavaScript中使用数组中的数据.我该怎么做?
zer*_*kms 56
用System.Web.Script.Serialization.JavaScriptSerializerclass 序列化并分配给javascript var
虚拟样本:
<% var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); %>
var jsVariable = <%= serializer.Serialize(array) %>;
Run Code Online (Sandbox Code Playgroud)
Anh*_*Ngo 18
这是为了补充zerkms的答案.
要跨语言障碍传递数据,您需要一种通过序列化数据将数据表示为字符串的方法.JavaScript的序列化方法之一是JSON.在zerkms的示例中,代码将放在aspx页面内.要在一个aspx页面上将他的示例和你的例子组合在一起,你会有,
<%
int[] numbers = new int[5];
// Fill up numbers...
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
%>
Run Code Online (Sandbox Code Playgroud)
稍后在aspx页面上的某个地方
<script type="text/javascript">
var jsVariable = <%= serializer.Serialize(numbers) %>;
</script>
Run Code Online (Sandbox Code Playgroud)
但是,这个答案假设您从初始页面加载生成JavaScript.根据你帖子中的评论,这可以通过AJAX完成.在这种情况下,您可以让服务器使用序列化的结果进行响应,然后使用您喜欢的框架在JavaScript中对其进行反序列化.
注意:也不要将此标记为答案,因为我希望语法高亮显示另一个答案更清晰.
Gar*_*ary 15
您可以使用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());
Run Code Online (Sandbox Code Playgroud)
注意:使用StringBuilder构建脚本字符串,因为它可能很长.
这里是用于检查注入数组"testArray"的Javascript,然后才能使用它:
if (testArray)
{
// do something with testArray
}
Run Code Online (Sandbox Code Playgroud)
这里有两个问题:
有些人认为这会侵入C#以注入Javascript
我们必须在全局上下文中声明数组
如果您不能忍受这种情况,另一种方法是让C#代码将Array保存到View State中,然后让JavaScript使用PageMethods(或Web服务)回调服务器以将View State对象作为一个阵列.但我认为这样的事可能有点过头了.
Che*_*hen 11
在页面文件中:
<script type="text/javascript">
var a = eval('[<% =string.Join(", ", numbers) %>]');
</script>
Run Code Online (Sandbox Code Playgroud)
在代码背后:
public int[] numbers = WhatEverGetTheArray();
Run Code Online (Sandbox Code Playgroud)
对于对象数组:
var array= JSON.parse('@Newtonsoft.Json.JsonConvert.SerializeObject(numbers)'.replace(/"/g, "\""));
Run Code Online (Sandbox Code Playgroud)
对于int数组:
var array= JSON.parse('@Newtonsoft.Json.JsonConvert.SerializeObject(numbers)');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
100065 次 |
| 最近记录: |