まず、現在のバージョンの Visual Studio (2013) では、"web フォーム" プロジェクトと "mvc" プロジェクトの区別がありません。あるのは Web アプリケーション プロジェクトだけで、その中には何でも好きなものを入れることができます。
私の経験から、あなたの問題にアプローチするための素晴らしくクリーンな方法は、通常の MVC コントローラーを作成して、angularJS アプリケーションを含むかみそりビューをレンダリングし、ajax メソッドの RESTful インターフェイス用の WebAPI コントローラーを作成することです。
angularJS では、手動で ajax 呼び出しを行う必要はありません。もっと便利で強力な方法があります: リソースです。また、WebAPI コントローラーは単一タイプのオブジェクト (顧客など) と連携し、HTTP VERBS を介して CRUD を実行できるため、WebAPI 設計ともうまく連携します。例えば:
// assume we have a backend repository that handles the data
public HttpResponseMessage Get()
{
return this.Request.CreateResponse(HttpStatusCode.OK, this.repository.GetAllCustomers());
}
public HttpResponseMessage Post(Customer customer)
{
var modifiedCustomer = this.repository.Update(customer);
this.repository.SaveChanges();
return this.Request.CreateResponse(HttpStatusCode.OK, modifiedCustomer);
}
このメソッドは、利用可能なすべての顧客を照会して返します。ここでは、JSON と XML のどちらを返すかを定義しません。WebAPI フレームワークは、WebAPI 要求の HTTP HEADERS を読み取り、クライアントからの要求に応じてデータをシリアル化します。使用する可能性が高い JSON の場合、定義されているデフォルトの JSON シリアライザーを介してシリアル化を行います。これをオーバーライドして、JSON の作成方法を変更できます。一般的な方法は、JSON.NET をカスタム設定で使用することです。
AngularJS リソースは、単一の URL をマップし、内部ですべての動詞を操作して、$save、$query、$get などのメソッドを公開するように作成されているため、非常にうまく結合されます。例えば:
var customerRes = $resource('/customers');
var currentCustomers = customerRes.query(function(){ // query is mapped to the GET verb
currentCustomers[0].email = "foo@baz.bar";
currentCustomers[0].$save(); // default mapped to the POST verb
});
詳細については、ドキュメントとサンプルを確認することをお勧めします。