www.国产视频,一级看片免费视频囗交动图,波多野结衣高清无码中文456,中国一级特黄特级毛片,69mmWWW路cOm,天天摸夜夜摸黄片,aaaaaaaaa在线观看

綠色資源網(wǎng):您身邊最放心的安全下載站! 最新軟件|熱門排行|軟件分類|軟件專題|廠商大全

綠色資源網(wǎng)

技術(shù)教程
您的位置:首頁(yè)網(wǎng)絡(luò)編程.Net編程 → 利用ajax.dll進(jìn)行asp.net ajax開發(fā)

利用ajax.dll進(jìn)行asp.net ajax開發(fā)

我要評(píng)論 2009/09/10 19:10:47 來(lái)源:綠色資源網(wǎng) 編輯:綠色資源站 [ ] 評(píng)論:0 點(diǎn)擊:669次

Asynchronous JavaScript and XML(AJAX)最近掀起的高潮,要完全歸功于Google在Google Suggest和Google Maps中的使用。對(duì)ASP.NET而言,AJAX不需要回傳就能進(jìn)行服務(wù)器端處理,從而使客戶機(jī)(瀏覽器)具有豐富的服務(wù)器端能力。換句話說,它為異步指派和處理請(qǐng)求與服務(wù)器響應(yīng)提供了一個(gè)框架。AJAX利用了一些不是很新穎的已有技術(shù),但是對(duì)這些技術(shù)(加到一起就是AJAX)的愛好最近突然升溫。

請(qǐng)嘗試Michael Schwarz的AJAX .NET包裝器,通過它ASP.NET開發(fā)人員可以快速方便的部署很容易利用AJAX功能的頁(yè)面。需要注意的是,這個(gè)包裝器處于初期開發(fā)階段,因此還沒有完全成熟。

它是如何工作的——概述

AJAX依靠代理(broker)指派和處理往返服務(wù)器的請(qǐng)求。對(duì)此,.NET包裝器依靠客戶端XmlHttpRequest對(duì)象。多數(shù)瀏覽器都支持XmlHttpRequest對(duì)象,這就是選擇它的原因。因?yàn)榘b器的目的是隱藏XmlHttpRequest的實(shí)現(xiàn),我們就不再詳細(xì)討論它了。
包裝器本身通過將.NET函數(shù)標(biāo)記為AJAX方法來(lái)工作。標(biāo)記之后,AJAX就創(chuàng)建對(duì)應(yīng)的JavaScript函數(shù),這些函數(shù)(和任何JavaScript函數(shù)一樣)作為代理可以在客戶端使用XmlHttpRequest調(diào)用。這些代理再映射回服務(wù)器端函數(shù)。

復(fù)雜嗎?并不復(fù)雜。我們來(lái)看一個(gè)例子。假設(shè)有一個(gè).NET函數(shù):

ublic int Add(int firstNumber, int secondNumber)
{
return firstNumber + secondNumber;
}

AJAX .NET包裝器將自動(dòng)創(chuàng)建名為“Add”、帶有兩個(gè)參數(shù)的JavaScript函數(shù)。使用JavaScript(在客戶機(jī)上)調(diào)用該函數(shù)時(shí),請(qǐng)求將傳遞給服務(wù)器并把結(jié)果返回給客戶機(jī)。

初始設(shè)置

我們首先介紹“安裝”項(xiàng)目中使用的.dll的步驟。如果您很清楚如何添加.dll文件引用,可以跳過這一節(jié)。

首先,如果還沒有的話,請(qǐng)下載最新的AJAX版本。解壓下載的文件并把a(bǔ)jax.dll放到項(xiàng)目的引用文件夾中。在Visual Studio.NET中有機(jī)Solution Explorer的“References(引用)”節(jié)點(diǎn)并選擇Add Reference(添加引用)。在打開的對(duì)話框中,單擊Browse(瀏覽)并找到ref/ajax.dll文件。依次單擊Open(打開)和Ok(確認(rèn))。這樣就可以用AJAX .NET包裝器編程了。

建立HttpHandler

為了保證正常工作,第一步是在web.config中設(shè)置包裝器的HttpHandler。不需要詳細(xì)解釋HttpHandlers是什么及其如何工作,只要知道它們用于處理ASP.NET請(qǐng)求就足夠了。比如,所有*.aspx頁(yè)面請(qǐng)求都由
System.Web.UI.PageHandlerFactory類處理。類似的,我們讓所有對(duì)ajax/*.ashx的請(qǐng)求由Ajax.PageHandlerFactory處理:

〈configuration>
〈system.web>
〈httpHandlers>
〈add verb="POST,GET" path="ajax/*.ashx"
type="Ajax.PageHandlerFactory, Ajax" />
〈/httpHandlers>

〈system.web>
〈/configuration>

簡(jiǎn)言之,上面的代碼告訴ASP.NET,和指定路徑(ajax/*.ashx)匹配的任何請(qǐng)求都由Ajax.PageHandlerFactory而不是默認(rèn)處理程序工廠來(lái)處理。不需要?jiǎng)?chuàng)建ajax子目錄,使用這個(gè)神秘的目錄只是為了讓其他HttpHandlers能夠在自己建立的子目錄中使用.ashx擴(kuò)展。

建立頁(yè)面

現(xiàn)在我們可以開始編碼了。創(chuàng)建一個(gè)新頁(yè)面或者打開已有的頁(yè)面,在file后的代碼中,為Page_Load事件添加以下代碼:

public class Index : System.Web.UI.Page{
private void Page_Load(object sender, EventArgs e){
Ajax.Utility.RegisterTypeForAjax(typeof(Index));
//
}
//
}


調(diào)用RegisterTypeForAjax將在頁(yè)面上引發(fā)后面的JavaScript(或者在頁(yè)面中手工加入以下兩行代碼):

〈script language="javascript" src="ajax/common.ashx">〈/script>
〈script language="javascript"
src="ajax/Namespace.PageClass,AssemblyName.ashx">〈/script>

其中最后一行的含義是:

Namespace.PageClass——當(dāng)前頁(yè)面的名稱空間和類(通常是@Page指令中Inherits屬性的值)

AssemblyName——當(dāng)前頁(yè)面所屬程序集的名稱(通常就是項(xiàng)目名)
下面是AjaxPlay項(xiàng)目中sample.aspx頁(yè)面的結(jié)果例子:

〈%@ Page Inherits="AjaxPlay.Sample" Codebehind="sample.aspx.cs" %>
〈html>
〈head>
〈script language="javascript" src="ajax/common.ashx">〈/script>
〈script language="javascript"
src="ajax/AjaxPlay.Sample,AjaxPlay.ashx">〈/script>
〈/head>
〈body>
〈form id="Form1" method="post" runat="server">

〈/form>
〈/body>
〈/html>

可以在瀏覽器中手工導(dǎo)航到src路徑(查看源代碼,復(fù)制粘貼路徑)檢查是否一切正常。如果兩個(gè)路徑都輸出一些(似乎)毫無(wú)意義的文本,就萬(wàn)事大吉了。如果什么也沒輸出或者出現(xiàn)ASP.NET錯(cuò)誤,則表明有些地方出現(xiàn)問題。

即便不知道HttpHandlers如何工作,上面的例子也很容易理解。通過web.config,我們已經(jīng)保證所有對(duì)ajax/*.ashx的請(qǐng)求都由自定義的處理程序處理。顯然,這里的兩個(gè)腳本標(biāo)簽將由自定義的處理程序處理。

創(chuàng)建服務(wù)器端函數(shù)

現(xiàn)在來(lái)創(chuàng)建可從客戶端調(diào)用中異步訪問的服務(wù)器端函數(shù)。因?yàn)槟壳斑€不支持所有的返回類型(不用擔(dān)心,將在目前的基礎(chǔ)上開發(fā)新的版本),我們繼續(xù)使用簡(jiǎn)單的ServerSideAdd函數(shù)吧。在file后的代碼中,向頁(yè)面添加下列代碼:

[Ajax.AjaxMethod()]
public int ServerSideAdd(int firstNumber, int secondNumber)
{
return firstNumber + secondNumber;
}

要注意,這些函數(shù)具有Ajax.AjaxMethod屬性集。該屬性告訴包裝器這些方法創(chuàng)建javaScript代理,以便在客戶端調(diào)用。

客戶端調(diào)用

最后一步是用JavaScript調(diào)用該函數(shù)。AJAX包裝器負(fù)責(zé)創(chuàng)建帶有兩個(gè)參數(shù)的JavaScript函數(shù)Sample.ServerSideAdd。對(duì)這種最簡(jiǎn)單的函數(shù),只需要調(diào)用該方法并傳遞兩個(gè)數(shù)字:

〈%@ Page Inherits="AjaxPlay.Sample" Codebehind="sample.aspx.cs" %>
〈html>
〈head>
〈script language="javascript" src="ajax/common.ashx">〈/script>
〈script language="javascript"
src="ajax/AjaxPlay.Sample,AjaxPlay.ashx">〈/script>
〈/head>
〈body>
〈form id="Form1" method="post" runat="server">
〈script language="javascript">
var response = Sample.ServerSideAdd(100,99);
alert(response.value);
〈/script>
〈/form>
〈/body>
〈/html>

當(dāng)然,我們不希望僅僅用這種強(qiáng)大的能力來(lái)警告用戶。這就是所有客戶端代理(如JavaScript Sample.ServerSideAd函數(shù))還接受其他特性的原因。這種特性就是為了處理響應(yīng)而調(diào)用的回調(diào)函數(shù):

Sample.ServerSideAdd(100,99, ServerSideAdd_CallBack);

function ServerSideAdd_CallBack(response){
if (response.error != null){
alert(response.error);
return;
}
alert(response.value);
}


從上述代碼中可以看到我們指定了另外一個(gè)參數(shù)。ServerSideAdd_CallBack(同樣參見上述代碼)是用于處理服務(wù)器響應(yīng)的客戶端函數(shù)。這個(gè)回調(diào)函數(shù)接收一個(gè)響應(yīng)對(duì)象,該對(duì)象公開了三個(gè)主要性質(zhì)

Value——服務(wù)器端函數(shù)實(shí)際返回的值(無(wú)論是字符串、自定義對(duì)象還是數(shù)據(jù)集)。

Error——錯(cuò)誤消息,如果有的話。

Request——xml http請(qǐng)求的原始響應(yīng)。

Context——上下文對(duì)象。

首先我們檢查error只看看是否出現(xiàn)了錯(cuò)誤。通過在服務(wù)器端函數(shù)中拋出異常,可以很容易處理error特性。在這個(gè)簡(jiǎn)化的例子中,然后用這個(gè)值警告用戶。Request特性可用于獲得更多信息(參見下一節(jié))。

處理類型

返回復(fù)雜類型

Ajax包裝器不僅能處理ServerSideAdd函數(shù)所返回的整數(shù)。它目前還支持integers、strings、double、booleans、DateTime、DataSets和DataTables,以及自定義類和數(shù)組等基本類型。其他所有類型都返回它們的ToString值。
返回的DataSets和真正的.NET DataSet差不多。假設(shè)一個(gè)服務(wù)器端函數(shù)返回DataSet,我們可以通過下面的代碼在客戶端顯示其中的內(nèi)容:

〈script language="JavaScript">
//Asynchronous call to the mythical "GetDataSet" server-side function
function getDataSet(){
AjaxFunctions.GetDataSet(GetDataSet_callback);
}
function GetDataSet_callback(response){
var ds = response.value;
if(ds != null && typeof(ds) == "object" && ds.Tables != null){
var s = new Array();
s[s.length] = "〈table border=1>";
for(var i=0; i〈ds.Tables[0].Rows.length; i++){
s[s.length] = "〈tr>";
s[s.length] = &qu

關(guān)鍵詞:ajax.dll,asp.net,ajax

閱讀本文后您有什么感想? 已有 人給出評(píng)價(jià)!

  • 2 歡迎喜歡
  • 2 白癡
  • 2 拜托
  • 2 哇
  • 2 加油
  • 2 鄙視