Pregunta

Estoy intentando llamar a un método C # desde JavaScript usando ActiveXObject :

var myobj = new ActiveXObject('myobject');
var arr = myobj.GetArray();

Eventualmente, arr contendrá un objeto SAFEARRAY , pero no una matriz JScript . ¿Hay alguna forma de devolver un objeto JavaScript nativo de un método C #?

¿Fue útil?

Solución 2

Encontré la solución por mí mismo, pero no existe documentación para esta parte. La solución es usar JScript.ArrayObject de la siguiente manera:

ArrayObject _lastField;
byte[] byteArray = new byte[]{2,1,2,3};
object[] array = new object[byteArray.Length];
byteArray.CopyTo(array, 0);
_lastField = Microsoft.JScript.GlobalObject.Array.ConstructArray(array);

Después de eso, podrá utilizar la matriz _lastField en JavaScript como una matriz nativa:

var myobj = new ActiveXObject('myobject');
var arr = myobj.LastField;
alert(arr[1]);

Otros consejos

Puede devolver una JSON y luego analizar en un objeto JavaScript. Hay varias bibliotecas .NET disponibles para serializar objetos .NET en JSON y viceversa-

por nombrar algunos.

Esta pregunta y respuesta puede ser de utilizar para usted

Puede devolver una cadena unida delimitada en C # y puede dividirse en JavaScript

//C#
public string getArryString()
{
string[] arrstring = new string[]{"1","2","3"};
return string.Join(",", arrstring);
}

//Javascript
var arrstring = objActiveX.getArryString().split(',');

A través de VBArray puede funcionar así:

  1. Devuelve el objeto [] de C # (declararlo en la interfaz)

  2. Para obtener una matriz JS nativa en JScript, use VBArray:

    var jsArray = new VBArray(myobj.GetArray()).toArray();
    for (i = 0; i < jsArray.length; i++) 
    {
       // use jsArray[i]
    }
    

Información general:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top