将数组从C#传递到Javascript

将数组从C#传递到Javascript,c#,javascript,arrays,processing,C#,Javascript,Arrays,Processing,我有一个处理程序,通过运行以下方法更新: public void createParam (int nWidth, int nHeight, int nNumBalls, float[] nR, float[] nVel, int[] nC)... 只要我不尝试更改最后三个值,我就可以通过Javascript轻松做到这一点: var applet = document.getElementById("ballApplet"); applet.createParam(di

我有一个处理程序,通过运行以下方法更新:

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是int,radius和vel是浮点数组,c是int数组

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,它调用处理小程序中的方法

Java,一个具有“createParam”方法的处理小程序

以下是如何在C#中声明相关变量:


数组不会像您所想的那样转换为字符串。它们只是显示类型信息,这就是为什么您会看到
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中被视为数组。

我喜欢在.Net中使用json序列化程序,只需注册clientscript string.concat(“var youraray=,serializedJsonString”);然后,您的数组对象将在dom中可用。

您的
createParam
方法中是否包含C代码段(
string command=“var applet…”
)?我很困惑,因为
createParam
似乎是某种applet的一部分,而不是C#程序。如果不是,则
numBalls
的确切类型是什么?(向我们展示它的声明)使用json:r、vel和c不是字符串,而是float和int数组。我如何使用它们?我应该让它们成为字符串数组吗?你说“它们不是字符串”是什么意思?我知道它们是数组,这就是为什么我使用
string.Join
方法——将像这样的
new[]{5,6,7}
数组转换为字符串
5,6,7
。还要注意的是,我用方括号将它们括起来,因此它实际上产生了
[5,6,7]
,这是用于指定数组的Javascript语法。你不这样做并不意味着这不是正确的答案。@Kirk Woll不知道答案——不是我。@Jimmy,我永远不会下结论,也不会参与报复性投票。:)对不起,没有一个例子,这个平板电脑键盘不适合编码。
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);