2011-11-10 9 views
1

サーバーからクライアント側にJsonを取得する必要があります。ほとんどのチュートリアルでは、Jsonを取得するための別のアクションをAjax呼び出しと仮定しているため、やや面倒です。なぜJsonを取得する別の呼び出しがありますか?

これは、このようにして何らかの理由があると思うようになりました。 Asp.Net MVCでは、モデルを渡して情報を取得することができますが、Jsonオブジェクトを簡単に渡すことはできません。代わりに、この情報を得るために別の呼び出しを行うことになっています。

ページが生成されたときにJson情報がわかっている場合は、なぜ同時に生成しないのですか?


私は十分に明確でない場合は申し訳ありません。 Jsonをクライアントに呼び出す方法を聞いてうれしいですが、実際には、Ajax呼び出しメソッドがセキュリティなどのようにはるかに一般的な特定の理由があるかどうかという疑問があります。

答えて

0

content-negotiationを使用するには、受け入れヘッダーを設定します。これはベストプラクティスと見なされます(そして、いくつかのRESTfulに応じて)。

これは、サーバーでもサポートされ、実装される必要があります。 ASP NET MVC は、コンテンツネゴシエーションをサポートするためにを簡単にしません。if-elseまたはActionFilterを使用してアクションセレクタを実装することで、自分自身で実装する必要があります。

1

あなたはこのようなものをあなたの視野に入れることができますか? (ラフ擬似コード、カミソリのビューを使用して仮定して)

< script >

var myJSON = { Field: @model.Field, Field2: @model.Field2 };

< /script >

+0

私はポイントまですることができます。コレクションを持っていて、複数のchildオブジェクトを追加したり、それをKnockoutjs Observablesに挿入したりしなければ、cshtmlページのコードが多すぎることがわかります。また、私の質問は、それがなぜ一方的なのか、もう一方の方法ではないのかということです。それはまだ最も単純な方法のようです。 –

1

あなたは、同時に両方を必要としないので...最初の呼び出しにHTML(データのビューを取得することになります - 表現をビューモデルによって)、そして任意のajax呼び出しは、おそらく更新されたデータ(jsonの直列化されたビューモデル)を取得することになります。

+0

私はそれが特定の場合にのみデータを分離して得ることを望んでいないかもしれないと思うでしょうが、ここではほぼすべての場合に想定しています。 –

1

あなたができない理由はありません。 javacriptシリアライザを使用して、ページにドロップするJSON文字列を作成できます。スクリプトタグから呼び出されたjson文字列を返すアクションを作成することもできます。

KnockOutを使用している場合、KnockOutを使用する場合は、上記のような通常のJSオブジェクトをKnockOutが使用可能な観測可能な状態にするマッピングプラグインが必要です。情報をここから参照してください。 http://knockoutjs.com/documentation/plugins-mapping.html

関連する問題