当前位置: 代码迷 >> ASP.NET >> 怎样通过JavaScript向WebService传递C#对象集合,如List<MyClass>解决思路
  详细解决方案

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

热度:10099   发布时间:2013-02-25 00:00:00.0
怎样通过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();
}
------解决方案--------------------------------------------------------
  相关解决方案