繁体   English   中英

将数组从C#传递到Javascript

[英]Passing arrays from C# to Javascript

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

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

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

这是在C#中声明relevent变量的方式:

            int numBalls = eventCount;
            ...
            float[] vel = new float[numBalls];
            ...
            float[] r = new float[numBalls];
            int[] c = new int[numBalls];

数组不会像您所想的那样转换为字符串。 它们只是显示类型信息,这就是为什么您看到System.Single[] 相反,您必须使用string.Join自己进行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 http://msdn.microsoft.com/zh-CN/library/system.web.script.serialization.javascriptserializer.aspx中使用json序列化程序,只需注册客户端脚本string.concat(“ var yourArray =”, serializedJsonString); 那么yourArray对象将在dom中可用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM