将数组从c#传递到Javascript
本文关键字:Javascript 数组 | 更新日期: 2023-09-27 18:03:30
我有一个Processing程序,我通过运行这个方法来更新它:
public void createParam (int nWidth, int nHeight, int nNumBalls, float[] nR, float[] nVel, int[] nC)...
我可以通过Javascript很容易地做到这一点,只要我不试图改变最后三个值:
var applet = document.getElementById("ballApplet");
applet.createParam(divw, divh, 6, null, null, null);
然而,我正在尝试使用c#来完成非空值。我使用以下代码:
string command = "var applet = document.getElementById('ballApplet'); ";
command = command + "applet.createParam(divw, divh," + numBalls + ", " + r + ", " + vel + ", " + c + ");"; //width, height, num, radius, vel, c
JCall(command);
num为整型,radius和vel为浮点数,c为整型数组。
JCall是我用来将Javascript添加到页面的方法。这对这个问题并不重要,它可以按预期工作。
这将导致Javascript错误:Error: syntax error
Source file: http://localhost:63803/Default.aspx
Line: 1227, Column: 214
Source code:
var applet = document.getElementById('ballApplet');
applet.createParam(divw, divh,1, System.Single[], System.Single[], System.Int32[]);
似乎它传递的是类型(System.Single[])而不是数组本身。我如何将数组传递给Javascript?
更新:为了更明确一点,这里有三段代码。
c#,调用JavaScript函数
JavaScript,调用Processing applet中的方法。
Java,一个具有"createParam"方法的Processing applet。
下面是c#中相关变量的声明: int numBalls = eventCount;
...
float[] vel = new float[numBalls];
...
float[] r = new float[numBalls];
int[] c = new int[numBalls];
我喜欢在。net中使用json序列化器http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx只是注册clientscript字符串。concat("var yourArray = ", serializedJsonString);那么yourArray对象将在dom
数组不会像你想的那样转换为字符串。它们只是显示了类型信息,这就是为什么你会看到System.Single[]
。相反,您必须使用string.Join
:
string command = "var applet = document.getElementById('ballApplet'); ";
command = command + string.Format(
"applet.createParam(divw, divh, {0}, [{1}], [{2}], [{3}]);",
numBalls,
string.Join(", ", r.Select(x => x.ToString())),
string.Join(", ", vel.Select(x => x.ToString())),
string.Join(", ", c.Select(x => x.ToString()))
);
JCall(command);
请注意,我还用[
和]
字符包围了这些数组,因此它们在Javascript中被视为数组。