從事了幾年的C/S模式的開發(fā),曾一直無暇研究B/S,前段時間攤上了一個B/S的活,這才開始認真的關注其B/S開發(fā)。而且,AJAX技術的風起云涌,也使得B/S應用的表現(xiàn)力日益增強,大有逐步吞食C/S領地之勢。這兩天通過《Ajax基礎教程》開始學習Ajax技術,在附錄的Ajax框架介紹中發(fā)現(xiàn)了這樣一句話:“利用Ajax.Net,你可以從JavaScript客戶調用.NET方法”。這是我夢寐以求的功能啊,于是迫不及待的開始研究下Ajax.Net,初試的結果令我對Ajax.Net非常滿意:)
好了,言歸正傳,先做好準備工作,首先下載Ajax.Net,你可以從這里獲得。最新版本是6.4.15.1,下載解壓后的文件夾中有個AjaxPro.2.dll,就是它了。使用VS2005新建web項目(注意,AjaxPro.2.dll不支持VS2003),并添加對AjaxPro.2.dll的引用,然后在Web配置文件中添加:
<httpHandlers>
<add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2"/>
</httpHandlers>
這個配置項表明所有的ajaxpro/*.ashx請求(即從客戶發(fā)送的Ajax請求)都交給AjaxPro.AjaxHandlerFactory處理,而不是由默認的System.Web.UI.PageHandlerFactory來處理。
新建的web項目有個默認的_Default頁面,我們?yōu)槠浼由厦臻g如MyAjaxNetTest,然后在_Default的HTML第一句也要加上這個名目空間:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="MyAjaxNetTest._Default" %>
然后在PageLoad中注冊本頁面到AjaxPro中:
protected void Page_Load(object sender, EventArgs e)
{
AjaxPro.Utility.RegisterTypeForAjax(typeof(_Default));
}
測試一: 一切已經(jīng)準備就緒了,我們先進行第一個測試,從客戶調用服務端的簡單方法。首先在_Default類中添加方法:
[AjaxPro.AjaxMethod]
public string GetServerTime()
{
return DateTime.Now.ToString();
}
客戶現(xiàn)在可以在JS中調用這個方法了,如
<script type="text/javascript">
function getTime()
{
alert(MyDemo._Default.GetServerTime().value);
}
</script>
然后你可以加個HTML的button,onclick處理函數(shù)設為getTime()。
<input id="Button1" type="button" value="button" onclick="getServerTime()"/>
測試二: 簡單方法調用已經(jīng)OK了,GetServerTime方法返回的是一個簡單的string,那么服務端可不可以返回稍微復雜一點的對象了?我們來試試。先新建一個Student類:
public class Student
{
public string Name = "sky" ;
public int Age = 26;
}
服務端添加GetStudent方法:
[AjaxPro.AjaxMethod]
public Student GetStudent()
{
return new Student();
}
對應的,客戶端添加調用:
function getStudent()
{
var stu = MyDemo._Default.GetStudent().value ;
alert(stu.Name + " " + stu.Age) ;
}
依照前面的加個HTML按鈕測試getStudent函數(shù),答案是,一切照我們預料的進行,客戶js可以訪問服務端返回的對象。
測試三:
最后看看能夠在客戶端提交對象給服務器,先在服務端添加方法:
1 private Student student = null;
2 [AjaxPro.AjaxMethod]
3 public void SetStudent(Student stu)
4 {
5 this.student = stu;
6 string name = this.student.Name;
7 }
可以在第六行添加斷點,然后當客戶端調用時,會進入該斷點。
客戶端添加調用:
function putStudent()
{
var stu = MyDemo._Default.GetStudent().value ;
stu.Name = "chenqi" ;
MyDemo._Default.SetStudent(stu) ;
}
同樣,當調用putStudent這個js方法時,服務端進入斷點已經(jīng)表明客戶成功的提交了對象,并且對象的Name字段已經(jīng)改變?yōu)?#8220;chenqi”了。
測試四:
前面客戶設置的都是Student的public字段,那么訪問屬性如何了?我們將Student定義更改如下: public class Student
{
private string name = "sky" ;
public int Age = 26;
public string Name
{
get
{
return this.name;
}
set
{
this.name = value;
}
}
}
再重復前面的測試,結果我想已經(jīng)在你的料想中了。
單從前面的幾個小測試,我已經(jīng)發(fā)現(xiàn)了使用Ajax.Net的方便與迅捷,看來B/S開發(fā)不再像我以前感受的那樣繁瑣了。
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請
點擊舉報。