2

私はMVCが大好きですが、ユーザーコントロールを実装する方法を理解できません。それぞれに買い物かごの詳細が含まれる複数のビューがある場合、買い物かごのビューとコードをカプセル化して、各コントローラーのビューデータでバスケットデータを返す必要がないようにするにはどうすればよいですか?

4

3 に答える 3

4

このMSDNページから:

部分ビューを使用すると、親ビュー内にレンダリングされるビューを定義できます。部分ビューは、ASP.NETユーザーコントロール(.ascx)として実装されます。

ショッピングカートビューを部分ビューで書き出します。ViewPage内で、呼び出し元Html.RenderPartial("PartialNameHere")のページ上の任意の場所にこれをレンダリングするために呼び出します。ビューと同様に、強く型付けされた部分ビューを使用して、選択したタイプのモデルを渡すことができます。

次の点に注意してください(上記のMSDNリンクから;強調鉱山):

部分ビューがインスタンス化されると、親ビューで使用できるViewDataDictionaryオブジェクトの独自のコピーを取得します。したがって、部分ビューは親ビューのデータにアクセスできます。ただし、部分ビューがデータを更新する場合、それらの更新は部分ビューのViewDataオブジェクトにのみ影響します。親ビューのデータは変更されません

于 2009-12-10T16:21:37.163 に答える
2

他の答えは正確に正しいですが、2番目のオプションがあります。部分ビュー専用のコントローラーアクションへのAJAX呼び出しの結果として、部分ビューをレンダリングできます。そうすれば、部分ビューは、関心のあるデータのみを持つモデルを処理する必要があります。

于 2009-12-10T19:11:28.170 に答える
1

バスケットユーザーコントロールを使用するビューを返す各コントローラーアクションでバスケットデータを返す必要があります。ただし、ここにはコードの繰り返しを回避する方法があります。OnAxctionExecutedイベントに適切なデータを挿入するカスタムActionFilterAttributeを使用してアクションメソッドを装飾するか、ベースコントローラーのInitializeメソッドのViewDataディクショナリにバスケットデータを追加してから、ViewData["magic-string"]を使用してコントロールでアクセスするか作成することができます。マジックストリングを回避するためのHtmlHelperの拡張メソッド。

于 2009-12-10T16:22:07.100 に答える