2012-04-21 17 views
4

MVCアプリケーションを作成していますが、Knockout.jsが多くの問題を解決すると判断しました。私は問題を解決している新しい問題。asp.net MVC with Knockout、モデルをjavascriptに渡す

すべてのMVCエンドポイントをビューに戻すように変換した後、JSONオブジェクトを返す他のいくつかのエンドポイントを作成しました。ユーザーがWebサイトを参照すると、サイトは基本的なUIフレームを読み込みます。その後、Knockout.jsはAJAX呼び出しを介してモデルを読み込みます。これにより、すべてのページがロードされた後、ロードされたページがロードされ、すべてのデータが存在するMVCだけでロードされます。

私は同時に両方を読み込む方法を検討してきましたが、サイトを完全にリファクタリングする必要のないものは見つかりませんでした。ビューのエンドポイントにJSONのエンドポイントをマージし、@Html.Raw(Json.Encode(object))

を使用して分離コードでJSONにモデルを変換

  • が、その後、私はすべての私の純粋なJSONエンドポイントの乗車を取得する必要があります:最良のオプションでした。

    JSONエンドポイントのデータをサーバー側のビューに渡すために他に何かできますか?または、モデルとビューを同時にロードする方法はありますか?

答えて

3

あなたのアーキテクチャは正しいですが、最初の読み込みでモデルからのデータでビューをあらかじめ設定しておきたいとします。ビューを返すコントローラアクション内で、ViewDataにデータを設定する必要があります。次にビューには最初にModel値がロードされ、各UI要素にはその特定のフィールドのControllerアクションを呼び出すAJAX更新があります。

ideal case for a ViewModelとなります。これは助けるかもしれないas well

+0

ありがとうございました!ちょうど私が同じページにいることを確認できるので、ビュー内のJSONエンドポイントを呼び出す必要がありますか?何かが好きです:var model = @ Html.Action( "Data"、 "Items")ここでmodelはjsですか? –

+0

更新のためにJSONエンドポイントを呼び出すだけです。 ViewModelオブジェクトを作成し、Javascriptでそのオブジェクトとやりとりする場合は、ビューにそのオブジェクトと対話させ、AJAX要求をカプセル化するメソッド(Controllerエンドポイントを使用する)だけを持つ必要があります。これにより、キャッシュや更新などのインテリジェントな処理を定期的に実行できます。 –

+0

私のビューのエンドポイントはJavaScriptに変換されるモデルを返す必要があり、そのモデルの更新バージョンを返すjsonエンドポイントが必要ですか?この場合、コードの重複を排除するために何ができますか? –

1

また、最初のビュー生成で最初のデータをビューに正しく表示させることをお勧めします。一般的に、これは別のAJAX呼び出し+後でデータをポピュレートするJavaScriptよりも優れたパフォーマンスをもたらします。

しかし、これは実際には読み込んでいるページのタイプに依存していると思います。あなたのアプリが主にAJAXベース(SPAスタイルのモデル)の場合、その最初の読み込みはおそらくそれほど重要ではないでしょう。なぜなら、それは一度だけ起こるからです。すべてのデータをAJAXまたは従来のビュー操作を介して一方向にロードする方がやや簡単で一貫性があります。クライアント側のコードで、リストやレコードのデータセット全体を再ロードする必要がある場合、その出力を生成するためにテンプレート/ビューロジックを複製する必要はありません。

関連する問題