读书人

怎样通过JavaScript向WebService传递C

发布时间: 2012-04-28 11:49:53 作者: rapoo

怎样通过JavaScript向WebService传递C#对象集合,如List<MyClass>?
怎样通过JavaScript向WebService传递C#对象?

比如我有一个简单的自定义类:

C# code
public class MyClass{    public MyClass()    {        //        //TODO: 在此处添加构造函数逻辑        //    }    private string name;    public string Name    {        get { return name; }        set { name = value; }    }    private int age;    public int Age    {        get { return age; }        set { age = value; }    }}


一个WebService,进行简单处理:
C# code
[System.Web.Script.Services.ScriptService]public class MyWebService : System.Web.Services.WebService {    public MyWebService () {        //如果使用设计的组件,请取消注释以下行         //InitializeComponent();     }    [WebMethod]    public MyClass GetClass(MyClass cls) {        cls.Name = cls.Name + " processed.";        cls.Age = cls.Age++;        return cls;    }    }


HTML code
<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server">    <title>无标题页</title><script language="javascript" type="text/javascript">// <!CDATA[function ButtonCallWebService_onclick() {    var cls = new MyClass();        cls.Name = $get('TextName').value;    cls.Age = $get('TextAge').value;     MyWebService.GetClass(cls, OnSuccess);}function OnSuccess(cls){    alert(cls.Name + "," + cls.Age);}// ]]></script></head><body>    <form id="form1" runat="server">    <asp:ScriptManager ID="ScriptManager1" runat="server">        <Services>            <asp:ServiceReference Path="~/MyWebService.asmx" />        </Services>    </asp:ScriptManager>    <div>        name:<input id="TextName" type="text" /><br />        age: <input id="TextAge" type="text" /><br />        <input id="ButtonCallWebService" type="button" value="Call" onclick="return ButtonCallWebService_onclick()" />    </div>    </form></body></html>



这是没问题的,那么怎样传递MyClass的集合呢?也就是说在WebService端可以以List<MyClass>方式接收,其实我主要是想利用LINQ在服务器端对这个集合进行查询,然后得出结论后再返回给客户端,当然返回string类型也可以。只不过我不知道该怎么进行自定义类型的数组类型的传递,请教。

[解决办法]
function MyClass()
? {
? this.name = "";
? this.age = -1;
? }
? ?
? ?
? function SendData()
? {
? var ma = [];
? for(var n = 0;n < 10; ++n)
? {
? var m = new MyClass();
? m.age = n;
? m.name = "name" + n;
? ma[n] = m;
? } ?
? MyWebService.GetClassListFunc(ma, GetDataCallback);
? }
[解决办法]
function Button_onclick() {
? var clsArray = new Array();
? ?
? for(var i = 0; i < 10; i++)
? {
? var cls = new MyClass();
? cls.Name = "name" + i;
? cls.Age = 5 + i;
? clsArray[i] = cls;
? }
? ?
? ?
? MyWebService.GetClass(clsArray, OnSuccess);
}
function OnSuccess(clsArray)
{
? var s = "";
? ?
? for(var i = 0; i < clsArray.length; i++)
? {
? s += clsArray[i].Name + ", " + clsArray[i].Age + "\n";
? }
? alert(s);
}

[WebMethod]
public MyClass[] GetClass2(MyClass[] cls)
{
? var result = from c in cls
? where c.Age > 10
? select c;

? return result.ToArray();
}
[解决办法]


据说 sp1234 这家伙已经升级到 VS2008了?

在Vs2008里有个类 是json 序列化的

可以把实体类序列化成json 格式,反之怡然,

所以如果你使用vs2008 的话 你去查查这个类,

好象在com组件里,如果你还是停留在原始的2005 甚至2003

不要告诉我你是用vc++6.0开发 网站

的,你也可以研究下他的机制,实现原理很简单的,就是解析来解析去.

不用等sp1234 了 把分给我 揭贴吧?

好久没接分了...
[解决办法]
说得是Sys.Serialization.JavaScriptSerializer.serialize(rst);?

[解决办法]

探讨
说得是Sys.Serialization.JavaScriptSerializer.serialize(rst);

[解决办法]
顶~~~
[解决办法]
接分来的,问题解决了吧
[解决办法]
http://www.json.org/json-zh.html
下面有N多json开源框架~~
[解决办法]
探讨
引用:
说得是Sys.Serialization.JavaScriptSerializer.serialize(rst);


不过你的方法和xhtmldivcss的方法都可以传递对象数组到WebService啊。
这种情况下为什么一定要用JSON呢?
那什么时候又必须要用JSON呢?

[解决办法]
探讨
我还是没明白。按3楼xhtmldivcss的例子,连服务器端自定义类对象的数组返回到客户端都能解析出来,那么JSON到底有什么用啊?用JSON不显得多余吗?

读书人网 >asp.net

热点推荐