【问题标题】:Passing arrays from C# to Javascript将数组从 C# 传递到 Javascript
【发布时间】:2011-07-26 21:50:59
【问题描述】:

我有一个通过运行此方法更新的处理程序:

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是float数组,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# 中相关变量的声明方式:

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

【问题讨论】:

  • 您的 C# sn-p (string command = "var applet...") 是否包含在您的 createParam 方法中?我很困惑,因为createParam 似乎是某种小程序的一部分,而不是 C# 程序。如果不是,numBalls 的确切类型是什么? (向我们展示它的声明)

标签: c# javascript arrays processing


【解决方案1】:

我喜欢在 .Net http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer.aspx 中使用 json 序列化程序,只需注册客户端脚本 string.concat("var yourArray = ", serializedJsonString);那么 yourArray 对象将在 dom 中可用

【讨论】:

  • 抱歉,这个平板键盘不适合编码。
【解决方案2】:

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

【讨论】:

  • r、vel 和 c 不是字符串,而是 float 和 int 数组。我该如何使用它们?我应该让它们成为字符串数组吗?
  • “它们不是字符串”是什么意思?我知道它们是数组,这就是我使用string.Join 方法的原因——将new[] { 5, 6, 7 } 这样的数组转换为字符串5, 6, 7。另请注意,我用方括号将它们括起来,因此它实际上会生成[5, 6, 7],这是用于指定数组的 Javascript 语法。
  • 致那些投反对票的人:这正是 OP 正在寻找的答案。仅仅因为你不会以这种方式实现它并不意味着它不是正确的答案。
  • @Kirk Woll 不明白——不是我。
  • @Jimmy,我永远不会草率下结论,也不会参与报复性投票。 :)
猜你喜欢
  • 1970-01-01
  • 2012-02-10
  • 2012-08-03
  • 1970-01-01
  • 1970-01-01
  • 2017-05-07
  • 2016-11-05
  • 2015-04-10
  • 1970-01-01
相关资源
最近更新 更多