1つのMVCのビューのための2つの強く型付けされたモデルを使用して
-
22-08-2019 - |
質問
私はMVCのプリンシパルへの根本的な何かが足りないか、私は怒っつもり?
私は書籍や著者のリストの一覧を表示するビューを持っている場合は、、私は本やプロパティなど、作者のリストのリストを持っているでしょうクラスを作成する必要があります。右?
私は、強く、このクラスを使用するビューを入力します。
今、私は同じリストで新しいページを作成したいが、それはまた、プロモーションのリストを持っています。私は、本プロパティのリスト、著者のプロパティやプロモーションプロパティのリストのリストを別のクラスを作成する必要がありますか?
私は余分な作業の多くの地獄を作成していますすべてのビューのためのクラスを作成していた場合。私はこれらのそれぞれのための強力な型指定されたパーシャルを作成することになっているだろうか?どのようなレイアウトが毎回異なる場合はどうなりますか?
現在、私はそれはいくつかの共通のプロパティが含まれているように、すべてのビューで使用されているBaseViewDataクラスを持っています。しかし、私は今、完全にBaseViewDataクラスを膨満感なしで他のアイテムを取得するために苦労しています。
誰かが私はすべての簡単な例をカバーしていないという理論を理解するのに役立ちますしてください。
解決
私はのViewDataの拡張メソッド MvcContribするから(限り、彼らはさまざまな種類あるとして)複数の強く型付けされたモデルのサポートを追加しています。 ViewDataをにそれらを追加するコードは次のようになります:
User currentUser = GetCurrentUser();
List<Project> projectList = projectRepository.GetRecentProjects(currentUser);
ViewData.Add(user);
ViewData.Add(projectList);
コードをビューでそれらを引き出すためには、次のようになります:
User user = ViewData.Get<User>();
List<Project> projectList = ViewData.Get<List<Project>>();
このは「魔法の文字列」と型キャストの両方を削除します。注、これはビューのモデルプロパティで何もしていません。
他のヒント
これまでお使いのシステム内のオブジェクトのためのONEコンテナクラスを作成し、すべてのビューで使用 - シンプルな
NULL値を持つオブジェクトが本当のオーバーヘッドを持っていません。
私は同じ問題に遭遇しました。私はほとんどの人々のための一般的な解決策は、あなたが本当に欲しい本と著者モデルが含まれているコンテナクラスを作成し、あなたのビューにそのコンテナを渡すことだと思います。
サブ最適な、はい、それは動作します。うまくいけば、これは、フレームワークの将来のバージョンで対処されます。