1. 程式人生 > 其它 >ASP.NET AJAX(2)__ASP.NET 2.0 AJAX Extensions

ASP.NET AJAX(2)__ASP.NET 2.0 AJAX Extensions

ASP.NET 2.0 AJAX Extensions為我們提供的主要功能如下

序列化和反序列化 客戶端訪問Web Service方法 伺服器端AJAX控制元件 _____ScriptManager _____UpdatePanel _____Extender

微軟的ASP.NET AJAX有一點非常讓人感覺神奇的一點,也算是他宣傳的一個鰲頭,說的是,所有的ASP.NET程式設計師,不用寫任何javascript程式碼就可以實現AJAX,那麼UpdatePanel呢,就是說著話的資本,我們也知道,幾乎所有的服務端控制元件,只要簡單的把它巢狀在UpdatePanel裡,然後做一些簡單的設定,就可以實現為一個AJAX效果,但是,這樣也就很容易造成一個AJAX的濫用,我們知道,AJAX的特點嫩,就是提高使用者體驗,減少了客戶端和伺服器端之間的資料訪問,而使用UpdatePanel,實際上並沒有減少傳送給伺服器端的資料量,相反,它增加了一些他需要的資料,這也使UpdatePanel經常變成一個性能殺手,所以我們在使用中一定要做到合理使用,當然啦,要做一個好的AJAX應用,不寫JAVASCRIPT程式碼是不可能的,其實我以下的文章裡,或者我們的實際應用裡將會寫大量的javascript程式碼,也幸虧吧,VS給我們提供和功能強大的程式碼提示功能,減少了錯誤率,也同時讓我們變懶了很多,反正任何東西也是有兩面性的,小白作為一個IT界的菜鳥,就不多做評價啦,一句話,這個程式碼提示功能,讓我不敢愛卻不得不愛,閒話少說,書歸正傳。。。。。。

首先寫一個客戶端訪問Web Service的Demo

1建立一個VehicleService.asmx(Web服務):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Script.Services;

/// <summary>
///VehicleService 的摘要說明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
//若要允許使用 ASP.NET AJAX 從指令碼中呼叫此 Web 服務,請取消對下行的註釋。 
[System.Web.Script.Services.ScriptService]
public class VehicleService : System.Web.Services.WebService 
{
    [WebMethod]
    [ScriptMethod]
    public Vehicle GetVehicle(string name,string fullSpeed,string weight)
    {
        return new Vehicle(name, Int32.Parse(fullSpeed), float.Parse(weight));
    }
}

這裡需要注意的是,一定要在類之前家上一個ScriptService標記,在需要呼叫的方法前ScriptMethod標記,這樣才可以保證方法在客戶端可以呼叫

2.在要呼叫webservice的頁面中加入ScriptManager控制元件,並在ScriptManager中註冊這個Webservice:

<asp:ScriptManager ID="ScriptManager1" runat="server">
            <Services>
                <asp:ServiceReference Path="~/Demo01/VehicleService.asmx" />
            </Services>
        </asp:ScriptManager>

這樣就可以在客戶端生成一些指令碼代理,方便我們呼叫

3然後加入指令碼程式碼,和呼叫方法的按鈕

<script language="javascript" type="text/javascript">
            function realizeVehicle(name, fullSpeed, myWeight) {
                VehicleService.GetVehicle(name, fullSpeed, myWeight, onSuccess);
            }

            function onSuccess(vehicle) {
               
                $get("text").innerHTML = String.format("This {0}'s full speed is {1} km/h.and this truck can load {2} kg heavy.", vehicle.Name, vehicle.FullSpeed,vehicle.Weight);
            }
        </script>
        
        <input type="button" value="FAW" onclick="realizeVehicle('FAW',150,30000);" />

在呼叫WebService時,在基礎引數後,還需要新增一個回撥函式,實際上,不只是一個回撥函式,這個以後將會寫到,這裡先留一扣子吧 和呼叫一般處理程式不同的是,這裡,我們就可以使用拿到的物件了,而不需要對它進行反序列化,實際上,它已經自動反序列化啦

好了,執行看看效果吧

小白   [email protected]