[英]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.