ASP.NET MVC 4 beta中包含了一個實驗項目,用作開發“單頁面應用程式(single page applications)”。該項目也稱為ASP.NET SPA,其項目類型基於一組開源庫以及WPF、Silverlight上流行的MVVM模式。
瀏覽器端
位於瀏覽器端技術組底部的是著名的jQuery庫,與之一起的還有Unobtrusive Ajax、jQuery UI和jQuery Validation外掛程式。
接下來的技術是Upshot。它是構建於jQuery和Knockout之上的資料訪問和緩衝庫。在範例程式碼中,你會看到有一個與knockout相容的視圖模型被自動產生。它的內部是基於Upshot的函數,用作處理與服務層的通訊。另外它還包含用於驅動UI的代碼。(SPA的視圖模型類似XAML技術,如此看來,這塊地方很快會充斥各式各樣的代碼。)
MVVM風格的資料繫結使用Knockout架構完成。與基於XAML的技術類似,Knockout提供了聲明式的資料繫結,它在當資料和視圖模型基於暴露屬性變更事件的observables 時,可以完美的進行工作。此外,你不需要顯式地引發事件,即使對計算屬性也是如此。綁定過程與設定控制項的DataContext屬性不同,你需要調用ko.applyBindings完成。然而這並不妨礙子控制項擁有不同的資料內容,面對這種情況只需簡單地為它們使用“with”或“foreach”綁定即可。其中“with”綁定類似於將控制項的DataContext綁定到視圖模型中的屬性,而後者“foreach”本質上建立了一個項目集合控制項。
位於技術組頂端的是nav.js,它是微軟新推出的一個庫。
伺服器端
服務端的應用程式架構由普通的MVC頁面表示,而應用程式內的各種視圖由分離頁面(partial pages)表示。在樣本中,Knockout資料繫結用作動態地顯示和隱藏這些頁面。
大部分服務端資料訪問都由抽象類別DataController處理。DataController是ASP.NET Web API中ApiController的子類,後者提供了用戶端向伺服器提交ChangeSetEntry的基本方法。喜歡使用預存程序或者第三方ORM的開發人員,可以直接繼承該類;而熟悉Entity Framework的開發人員可以使用DbDataController。Visual Studio的腳手架支援(scaffolding support)可以為後者自動產生附帶基本CRUD操作的代碼。
查看英文原文:http://www.infoq.com/news/2012/02/SPA
InfoQ中文原文:http://www.infoq.com/cn/news/2012/02/SPA