JavaScript-js调用c#,如何传递数组参数
c#中有函数 foo(string[] str);
js想调用此函数,如何传递str参数?? 用js的数组作为参数不行。
由于c#有源代码,目前的做法是 把参数改为string js传递","分隔的字符串,在c#中split(",")转成数组处理。
但是还有个dll(c#写的),没有源代码,如何调用带数组参数的方法呢??????
-------------------------------补充--------------------
可是是我没说明白,最终要的问题是,js调用c#的时候,无法传递数组,如果我传递的是js的数组比如:
js代码:
var strarray = {"1","2","3"};
csharpdll.foo(strarray);
就会报找不到函数的错误。
而大多数的时候,这个c#的dll我是修改不了的,我想问,这种情况怎么办?如何修改js才能让我调用到这个函数?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
首先,我不明白你为什么要用到JS调用C#。
我想,如果要调用的话为什么不直接到C#里调用。那样就不需要把JS数组直接传递到方法里了。
如果你的JS某段代码中间需要执行这一步的话,那么可以AJAX去执行。
JS不能直接把数组当成C#的数组使用,中间必须经过一些转换,比如你所说的转为字符串然后再分割成数组,或者使用上面那朋友说的JSON,但不管哪种,你都不能直接调用。中间都需要进行一些处理。
1.activeX控件最好不要传递数组,经验证:int、string都没有问题
2.如果是vb的数组,比较容易,用vbs创建数组就能传递
3.实在解决不了:
1)只能找dll的开发人员修改dll接口
2)自己再用vb、c#或vc封装一层(比如接收js的string,转成数组再调用dll),这个才是最通用的,不止是数组,所有传递不了的参数都可以这么做。
只能这样了,如果其他人还有更好的办法,请告诉我。
你可以换成var声明变量,foo(var str);
然后直接转换成你想要的
.--------------补充-----
无法修改Dll,有个最简单的方法,你完全可以在写一个C#方法来接受JS的数据进行转换
public void covertStr(string strarr)
{
string[] str = strarr.Split(',');
XX.XX.foo(str);//调用Dll里面的方法
}
然后JS调用covertStr就可以了
用json可以到这里有有种语言的标准的json处理库,其中包括C#的
http://json.org/
自己看看吧,都可以实现:
parseJSON和toJSON
先说第一个问题,其实没有必要用“,”分隔然后传递字符串给C#,既然可以修改C#代码,可以使用List来实现。
代码如下:
public string setArray(ArrayList array)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
for (int i = 0; i < array.Count; i++)
{
sb.Append(array[i].ToString());
}
return sb.ToString();
}