怎样通过JavaScript向WebService传递C#对象集合,如List解决思路
怎样通过JavaScript向WebService传递C#对象集合,如List<MyClass>?
怎样通过JavaScript向WebService传递C#对象?
比如我有一个简单的自定义类:
一个WebService,进行简单处理:
这是没问题的,那么怎样传递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();
}
------解决方案--------------------
怎样通过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();
}
------解决方案--------------------