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