Ajax.net机制使得服务器端的数据模型(即类及其之间的关系)能够被客户端的javascript所使用。而且通过Ajax.net,即使是使用了抽象机制和继承机制的类也能够被客户端的javascript所调用。
以下我们通过测试的代码来说明如何通过Ajax.net使javascript能够访问使用了抽象和继承机制的服务器端的类。
1.声明抽象类MyClass,其中定义了字符串的数据类型name.
[Serializable()]
public abstract class MyClass
{
protected string name;
public abstract class MyClass
{
protected string name;
public MyClass(string name){this.name = name;}
public string Name{get{return name;}}
public abstract void TTTT();
}
public string Name{get{return name;}}
public abstract void TTTT();
}
2.定义类MyInclude。
[Serializable()]
public class MyInclude
{
private string ttt;
public MyInclude(string ttt){this.ttt = ttt;}
public string Ttt{get{ return ttt;}}
}
{
private string ttt;
public MyInclude(string ttt){this.ttt = ttt;}
public string Ttt{get{ return ttt;}}
}
3. 定义抽象类MyClass的子类MyClassSub,其中包括其它的复杂对象类型 - MyInclude类型的变量testObj。
[Serializable()]
public class MyClassSub:MyClass
{
protected string test;
private MyInclude[] testObj;
public MyClassSub(string name, string test) : base(name)
{
this.test = test;
testObj = new MyInclude[] { new MyInclude("OK") };
}
public class MyClassSub:MyClass
{
protected string test;
private MyInclude[] testObj;
public MyClassSub(string name, string test) : base(name)
{
this.test = test;
testObj = new MyInclude[] { new MyInclude("OK") };
}
public MyInclude[] TestObj{get{return testObj;}}
public string Test{get{return test;}}
public override void TTTT(){}
public override void TTTT(){}
}
4. 在服务器端采用C#实现的Ajax服务器端响应函数MyFunc()中,可以使用MyClassSub来作为返回值的类型
[Ajax.AjaxMethod()]
public MyClassSub MyFunc()
{
return new MyClassSub("GHJ", "GOOD");
}
public MyClassSub MyFunc()
{
return new MyClassSub("GHJ", "GOOD");
}
5.在页面代表的javascript代码中,GetServerAction函数调用了服务器端的响应函数MyFunc(),在Callback的处理函数MyFunc_CallBack中,我们可以直接使用服务器端声明的类MyClassSub来作为对象。其中response.value的类型就是MyClassSub,response.value.TestObject的类型为MyInclude
<script language="javascript" type="text/javascript">
function GetServerAction()
{
TempAjaxClass.MyFunc(MyFunc_CallBack);
}
function MyFunc_CallBack(response)
{
alert(response.value.Name); //弹出框显示 'GHJ'
alert(response.value); // 弹出框显示[object object]
alert(response.value.TestObj); // 弹出框显示[object]
alert(response.value.TestObj[0].Ttt); // 弹出框显示'OK'
}
</script>
function GetServerAction()
{
TempAjaxClass.MyFunc(MyFunc_CallBack);
}
function MyFunc_CallBack(response)
{
alert(response.value.Name); //弹出框显示 'GHJ'
alert(response.value); // 弹出框显示[object object]
alert(response.value.TestObj); // 弹出框显示[object]
alert(response.value.TestObj[0].Ttt); // 弹出框显示'OK'
}
</script>
既然javascript能够使用服务器的抽象机制和继承机制,那么在架构和设计Ajax.net的系统的时候,我们就可以只在服务器端维护一份数据模型,通过[Serializable()]以及Ajax.net的技术就可以将服务器端的数据模型提供给客户端的javascript代码调用,而不需要在javascript中也维护对应的数据模型。
本文介绍如何利用Ajax.net机制让客户端JavaScript访问服务器端使用抽象和继承机制的类。通过示例代码展示如何定义抽象类及其实现,并在JavaScript中调用这些类的方法。
146

被折叠的 条评论
为什么被折叠?



