日期:2014-05-18  浏览次数:20380 次

怎样通过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();
}
------解决方案--------------------