ASP.NET MVC 4ベータには、“Single Page Application”を開発するための実験的なプロジェクトが含まれている。ASP.NET SPAとして知られるこのプロジェクトタイプは、オープンソースライブラリをベースにしており、WPFやSilverlightで普及したMVVMパターンで作られている。
ブラウザサイド
ブラウザ側の下部にいるのは、よく知られたjQueryライブラリが、Unobtrusive Ajax、jQuery UI、jQueryバリデーションなどのプラグインと一緒に使われている。
次の層は、Upshotである。これはおそらくjQueryとKnockoutの上に構築されたデータアクセスとキャッシュライブラリである。サンプルコードでは、knockout互換のview-modelが自動的に生成されていた。これの内部は、サービス層とのコミュニケーションを処理するUpshotベースの機能であった。これにはUIを操作できるコードも含まれている。(XAMLテクノロジのように、SPA view-modelは即座にすべてのパターンのコードにおけるゴミ捨て場になることができる)
MVVMスタイルのデータバインディングは、Knockoutフレームワークを使っている。KnockoutはXAMLベースの技術と同じように、宣言型のデータバインディングを提供する。同じく、プロパティの変更をイベントで公開するobservablesをベースとしたデータとビューモデルでは、最もうまく動作する。しかしながら、計算されたプロパティであっても、明示的なイベントの発行を行う必要がない。コントロールのDataContextプロパティの設定ではなくko.applyBindingsを呼び出す。これは、異なるデータコンテキストと関連づけられた子コントロールからのものを防ぐことができないが、それらは単純に“with”や“foreach”バインディングを使う必要があるということだけである。“with”バインディングは、View model上のバインディングコントロールのプロパティに対するDataContextのようなものであり、後者はアイテムコントロールの作成に効果がある。
最上位にあるのがMicrosoftの新しいライブラリであるnav.jsである。
サーバーサイド
サーバーサイドのアプリケーション枠は通常のMVCページである。アプリケーションに含まれる様々なビューは、部分ページによってサーバーサイドに置かれる。サンプルでは、Knockoutのデータバインディングは、表示・非表示を動的に行うために使われている。
ほとんどのサーバーサイドデータアクセスは、DataControllerの抽象クラスで処理される。これは、クライアントからサーバーにChangeSetEntryのサブミットを行う基本的なメソッドを提供するASP.NET Web APIのApiControllerのサブクラスである。ストアドプロシージャやサードパーティーのORMを使いたい開発者は、これを直接継承することができ、Entity Frameworkに傾いたときにはDbDataControllerを使うことができる。 Visual Studioのスキャフォールディングは、後者を基本的なCRUD操作を公開して自動的に生成することができる。