面向.NET程式開發人員的Ajax技術平台策略

來源:互聯網
上載者:User

文章的方法會給目 前使用Ajax的.NET使用者帶來協助,從而提高你在.NET平台下使用Ajax的體驗。為什麼這麼說,因為最近我的一個客戶(應該是一些客戶)的研發主 管對我說,我們對Atlas 非常興趣,想瞭解更多一些相關的內容和如何開始看待Atlas,因為下個月會來一個Atlas的專家和我們交流。因為我知道這個主管手上掌握著一個 Ajax架構的業務應用,目前在考慮從.NET v1.1遷移到.NET v2.0,Atlas能在怎樣的程度上幫忙他或他的Team?我沒有說太多,因為心裡我有些吃驚,目前的他們的架構應用Atlas 可能並不是一個明智的選擇,當然這個擔心基於我目前對Atlas的理解。

我列舉和討論的Ajax-NET的架構和工具包括 Atlas(Jan CTP), Anthem.NET, MagicAjax.NET , Ajax.NET Professional 和wwHoverPanel Control,這基本都是我關注的.NET平台的下的Ajax 的一些架構和實現。 基本上也都是我的這篇文章中列舉的,另外一個原因是因為他們基本上都是開源的,這個非常重要,因為沒有原始碼,我們將不知道究竟發生了什麼。另外我無意於 使之成為像Daniel Zeiss作的這個比較報告。

首先,開門見山的說明我的觀點。

對於開源或現有的 Ajax-NET技術或架構的選用必須針對你目前應用的架構來選取和考慮,如果你目前的架構是"似Ajax"的,那麼你在選擇現在所有流行的Ajax- NET的技術的時候都必須非常小心;而如果你目前的應用是使用傳統的ASP.NET的應用架構(或準備用ASP.NET v2.0開始建立新的應用),那麼目前流行的Ajax-NET的架構和技術都是普遍適合的,關鍵你要在合適的時機選擇合適的某個架構或實現。

在我的眼中,目前流行的Ajax-NET的架構或實現都是Add-in (Plug-in)的模式的,也就是說這些架構對於所有後一種即使用傳統的ASP.NET的應用架構(或準備用ASP.NET v2.0開始建立新的應用)是Awared的也就是非常有利和方便的。但對於"似Ajax"的架構來說,情況有所不同,需要你從另外的角度來衡量,有選擇 的使用。

那什麼是"似Ajax" 的架構呢,這就是說,你的應用程式是在Ajax概念提出之前就建立的。從用戶端和伺服器端的互動分析來說,你的用戶端有大量的Javascript 代碼接受XML資料,進行對象的序列化,然後使用Javascript配合其它的HTML技術展現這些對象和資料,也可能你還有一堆HTC或其它的 Javascript的HTML表現層控制項。你的伺服器端是一個Facade(或者是Adapter,Observer)模式的(Handler)控制 器,接收用戶端Javascript的XML請求資料後,然後解析XML,然後調用相應的某個服務或業務組件,再將結果以XML的形式返回給用戶端 Javascript ,用戶端的Javascript接收之後,再進行處理和顯示,因為可以使用HTML的DOM 和CSS,所有頁面的展現是動態。

這樣用戶端是中描述的Script-centric architecture 或Data-centric interactions 的方式。而且這種方式和Jesse James Garrett列舉的Ajax 是最類似的,只不過那時你或我不知道這個可以叫Ajax,只不過是現在的人誤解了Ajax,Ajax成了一種技術,一種特性,而首先不是一種某種架構下 Web 應用程式了。

而且目前流行的Ajax-NET的架構基本上都沒有實現雙向序列化,因為實現一個TextBox的自動完成用戶端 只用接收資料就行了,根本不用傳回資料/對象到伺服器端,同樣做一個Ajax的狀態進度條也不用,但這些都是Ajax啊,我們衡量的標準是非同步、頁面沒 有重新整理。

很抱歉,我用了這麼字才解釋完我的觀點。最後可以這麼說,如果你的應用已經是Ajax架構的,那麼你需要仔細選擇使用目前 的Ajax-NET架構,確保它也提供雙向序列化功能,相容你原來的應用和架構。如果你的應用不是Ajax架構的,那麼你可以依據一些條件來選擇Ajax -NET架構。

然後我們回到文章的開始,來看一些流行的Ajax-NET架構

1. MagicAjax.NET

這是目前架構中版本號碼最小的一個Ajax-NET實現,許多人很喜歡它,甚至一見如故,但真的看過它的代碼之後,我有些擔憂。

MagicAjax.NET基於這樣一種策略,即__doPostBack 會提及整個的ASP.NET頁面,這樣會導致頁面重新整理,所以MagicAjax.NET使用AJAXCbo.DoPostCallBack 做局部的提交,而每個AjaxPanel 中的內容則對應用戶端即時的HTML內容,因為在MagicAjax.NET中,用戶端只用執行eval(responseText) 伺服器端Rendered返回的HTML就可以了(很被動)。

由於DoPostCallBack 會提交ViewState 以及AjaxPanelx$RBS_Store,幾乎是用XMLHttpRequest 類比一個正常的提交,所以伺服器端可以建立頁面的執行個體也可以根據ViewState 恢複所有的控制項狀態,同樣AjaxPanel 以及AjaxControl 也都會執行個體化,然後接收用戶端傳來的_EventTarget, _EventArgument 走正常的ASP.NET控制項的處理過程,等控制項Rendered之後,最終的HTML輸出被傳回用戶端,然後被用戶端的eval 顯示出來。

整個過程非常巧妙,這幾乎是ASP.NET __doPostBack 的"Hook ASP.NET"版和加強版本。而HttpModel 主要是為瞭解決Session和交叉提交,進行用戶端Javascript的整理和注入,當然也是這裡接收用戶端的請求,在 Application_EndRequest中返回結果。剩下的代碼都是處理控制項在VS Web Design中的設計時支援。AjaxCallObject.js 和WebParts.js 每次都要傳到用戶端。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.