Web開発とMVC4にかなり慣れていないので、同じ設計の問題に繰り返し遭遇し、MVC4の世界で正しい/サポートされている/などのソリューションが何であるかを誰かが教えてくれることを望んでいました。
基本的に、私はビューモデルkoolaidを飲んで、プロジェクト内のすべてのビューのビューモデルを持っています。そのほとんどは、単一ページアプリケーションの何かで動的に更新される部分的なサブビューです。ビューの生成/レンダリングはすべて順調に進み、ユーザーはクライアント側でいくつかの値を更新し、サーバーを更新します。
例として、それが単純なコンテナビューモデルであるとしましょう。
public class Data {
public List<Prop> Props { get; set; }
}
public class Prop {
public string Id { get; set; }
public int Value { get; set; }
}
したがって、ユーザーがコンテナに新しい小道具を追加しているとしましょう。変更したオブジェクトをサーバーに戻すにはどうすればよいですか?
これまでのところ:サーバーがリアルタイムで同期していることが重要な場合は、サーバーで追加/更新するたびに電話をかけ、クライアントで同期を維持するか、サーバーに更新されたビューを返すようにすることができます。そのような単純なシナリオでは、すべてが順調です。
しかし、クライアントがオブジェクトを操作できるようにしたい場合(view / js / etcを介して)、サーバーで更新して送信するまで実際に更新する必要がない場合がよくあります。私が本当に望んでいるのは、レンダリングされたビューでオブジェクトを渡し、Javascriptを介してオブジェクトと対話し、すべてが完了したらオブジェクトをコントローラーに戻すことができるようにすることです。どうすればいいですか?(要点をつかむのに時間がかかったことをお詫びします!)
私が見た代替案:
--Quick &Dirty(RazorでviewmodelプロパティをJavaScriptにエンコード):これは確かにオブジェクトをクライアントのjavascriptに配置しますが、検証などを行わずにオブジェクト全体をクライアント側のhtmlにシリアル化するのはハックっぽいようです。 。(最終的には、それがオブジェクトの処理方法であることに気付きますが、MVC4オブジェクトの処理/解析全体をバイパスしているようです。)
--Upshot.Jsは、かつてはMSのサポートを約束していたようでしたが、死んだようです:Upshot.jsの現在の状況
--Breeze.js(http://www.breezejs.com/)は、そこを引き継ぐ試みのようですが、私の懸念は、それがかなり新しく、まだあまり広く採用されていないことです。
結局のところ、やや明白な代替案が欠けているように感じさせるのは、すべての要素がすでにMVC4に明確に組み込まれていることです。たとえば、フォームビューを使用する場合、フィールドはコントロールにデータバインドされ、フォームが送信されると、並列JSONオブジェクトが作成され、コントローラーに送信されてから、POCOViewModelオブジェクトに解析されます。これは基本的に私が探しているラウンドトリップです(ただし、完全なJSONオブジェクトをクライアント側に保持します)。それを処理するための「適切な」方法は何ですか?