ajaxPro.dll基礎教程(前臺調用後臺方法,後臺調用前臺方法)

AJAX技術的風起雲湧,也使得B/S應用的表現力日益增強,大有逐步吞食C/S領地之勢。利用ajaxpro.dll,你可以從JavaScript客戶調用.NET方法。   
      首先下載ajaxpro.dll,你可以從http://www.ajaxpro.info/獲得。最新版本是6.4.15.1,下載解壓後的文件夾中有個AjaxPro.dll,就是它瞭。使用VS2005新建web項目,並添加對AjaxPro.dll的引用,然後在Web配置文件中添加:
        <httpHandlers>
            <add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro"/>
        </httpHandlers>

    這個配置項表明所有的ajaxpro/*.ashx請求(即從客戶發送的Ajax請求)都交給AjaxPro.AjaxHandlerFactory處理,而不是由默認的System.Web.UI.PageHandlerFactory來處理。
    新建的web項目有個默認的_Default頁面,我們為其加上命名空間如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));
        }

    測試一:
    一切已經準備就緒瞭,我們先進行第一個測試,從客戶調用服務端的簡單方法。首先在_Default類中添加方法:
         [AjaxPro.AjaxMethod]
        public string GetServerTime()
        {
            return DateTime.Now.ToString();
        }
   
    客戶現在可以在JS中調用這個方法瞭,如
       <script type="text/javascript">
       function getTime()
       {        
          alert(MyAjaxNetTest._Default.GetServerTime().value);         
       }
       </script>
   
    然後你可以加個HTML的button,onclick處理函數設為getTime()。
<input id="Button1" type="button" value="button" onclick="getTime()"/>

   
    測試二:   
    為GetServerTime方法添加static修飾,測試仍然成功!

    測試三:
    簡單方法調用已經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 = MyAjaxNetTest._Default.GetStudent().value ;
         alert(stu.Name + " " + stu.Age) ;
       }

    依照前面的加個HTML按鈕測試getStudent函數,答案是,一切照我們預料的進行,客戶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 = MyAjaxNetTest._Default.GetStudent().value ;
            stu.Name = "chenqi" ;
            MyAjaxNetTest._Default.SetStudent(stu) ;
       }
    同樣,當調用putStudent這個js方法時,服務端進入斷點已經表明客戶成功的提交瞭對象,並且對象的Name字段已經改變為“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;
            }
        }
    }
    再重復前面的測試,結果我想已經在你的料想中瞭。

    單從前面的幾個小測試,我已經發現瞭使用Ajaxpro.dll的方便與迅捷,看來B/S開發不再像我以前感受的那樣繁瑣瞭。
異步調用

 

摘自 deepwishly專欄

發佈留言