将数组从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);