0

私は最初の主要なASP.NETMVCアプリケーション(および多くのjQuery)に1か月ほど取り組んできましたが、非常に満足しています。このようなページがあります。(実際のデータは、無実の人々を保護するために変更されました。)

<div id="main"></div>
<div id="movies"></div>
<div id="actors"></div>
<div id="actor-ratings"></div>
<div id="ratings-comments"></div>

ムービーdivには、選択できるムービーのテーブルが含まれています。アクター、actor-ratings、およびratings-comments divは、この時点ではすべて非表示になっています。映画がクリックされると、クリックを取得し、アクションに投稿し、データを取得し、データを取得してモーダルポップアップに配置するコールバック関数を取得するjQuery live()イベントがあります。(私はその順序が正しいと思います。どこかで間違っているかどうか教えてください。)

アクター、アクター評価、および評価コメントはすべて1つのページにロードする必要がある可能性があるため、コントローラーはすべてのデータをロードするための巨大なアクションを実行することになります。さらに、評価コメントdivはアクター評価モーダルを閉じる可能性がありますそして、新しいモーダルで自分自身を開きます。さらに、jQueryアドレスプラグインを実装して、戻るボタンを以前に開いたモーダルに戻すことができるようにします。

かなり迅速に複雑になります。それらのdivごとに部分ビューを使用する必要がありますか?それらのそれぞれにアクションを持つ1つのコントローラーが必要ですか?または、各部分ビュー/ divのコントローラーですか?部分的なdivは進むべき道のように思えますが、コードを分割する前に、いくつかのガイダンスを探していると思います。何かアドバイスをいただければ幸いです。

編集:また、私の俳優評価の部分ビューには、おそらく俳優の部分ビューからのデータの一部が必要になります。アクターデータにもActorRatingsコントローラーアクションをロードするだけですか?(強く型付けされたビューモデルをビューに渡します。)

4

2 に答える 2

1

アプリケーションの論理的に異なる部分を一貫して分離している限り、コードをどのように分割するかは必ずしもそれほど重要ではありません。

密接に関連している多くの部分的なビューによって駆動されるページの場合、アクションメソッドを単一のコントローラーに配置したくなるでしょう。ただし、非常にリッチなAJAX駆動型ページを作成する場合は、異なる機能を個別のコントローラーに分割することでメリットが得られる可能性があります。

アクションメソッドから部分的なビューを返すことは、おそらく最も保守可能で柔軟なソリューションですが、JSONを返すことは最小の帯域幅を使用します。あなたが説明したことについて、私は部分的な見解を返したくなるでしょう。

ActorsとActorRatingsの間の共有データについて、これ以上の詳細なしにコメントすることは困難です。Actorsアクションメソッドは、必要なすべての詳細を取得できませんか、それともActorRatingsメソッドが呼び出されたために更新されていますか?

于 2011-04-05T21:27:45.470 に答える
1

あなたが説明したように、ポップアップの動的コンテンツを処理する必要がある場合に部分的なビューを返す個別のアクションを使用するのが道です。アクションは、単一のコントローラーにマップすることも、コンテンツに基づいて異なるコントローラー間で分散させることもできます。これは、このビューの横で他に何をしているかによって異なります。部分ビューを使用すると、現在関心のあるフォームを読み込むだけの実際のjqueryダイアログを1つ使用できます。次に、jQuery serialize()を使用してモデルを準備し、非同期で実行する必要がある場合は保存アクションに送信できます。アクターの評価部分について:2つの方法があります。データをコントローラーアクションに渡すか、jsを使用して受信した部分ビューを好みに合わせて変更します。変更がより深刻であるか、ビューにあるよりも多くのデータを必要とする場合は、最初の方法を使用する必要があります。また、従うべきいくつかのルールがある場合-あなたはそれをあまりjsに入れたくないでしょう。2番目の方法は、パーシャルにわずかな調整が必要で、ラウンドトリップのデータを送信したくない場合は問題ありませんが、これは維持するのに頭痛の種になる可能性があります。

于 2011-04-05T21:34:56.260 に答える