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

将数组从c#传递到Javascript

我喜欢在。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中被视为数组。