2009-02-25 9 views
4

現在、ASP.NET MVCを習っていますので、質問されていたり、シンプルなように見える場合は、私の質問には間違いありません。ASP.NET MVC - ビューに2つのリポジトリを返す

私はビューに2つの異なるリポジトリを返そうとしています。私はASP.NET MVCのチュートリアルを行っています。私はそれをさらに進めていくつもりです。私は映画のムービーをデータベースに表示することはできますが、アクターテーブルのデータも同じに表示したいと思っています。リポジトリパターンに従っていた映画を表示するため。

これは意味があると思います。

おかげで、ビューへのデータの複数のセットを渡すために、私は私のアプリでやっているものだ

+0

技術的には、これは複製です。 http://stackoverflow.com/questions/514144/is-it-possible-to-send-more-than-one-model-object-to-an-asp-net-mvc-view/514198#514198 –

+0

申し訳ありません見えましたが、その投稿を見つけることができませんでした。ヘッドアップをありがとう。 –

+0

返事をいただいた皆様に感謝します。私はあなたのすべてのアイデアを書き留めました。 –

答えて

10

はそれで映画や俳優のリストの両方を持って新しいクラスを作成します。

public ActionResult List() 
{ 
    MoviesAndActorsModel model = new MoviesAndActorsModel(); 

    model.Movies = _repository.GetMovies(); 
    model.Actors = _repository.GetActors(); 

    return View(model); 
} 

今作る:あなたのリポジトリから移入されたタイプのMoviesAndActorsModelのオブジェクトをインスタンス化必ずあなたのビューは、ビューページ<MoviesAndActorsModel>から継承し、あなたはとてもような映画や俳優の両方にアクセスできるようにする必要があります

<% foreach (Movie movie in Model.Movies) { %> 
    <%= movie.Title %> 
<% } %> 

<% foreach (Actor actor in Model.Actors) { %> 
    <%= actor.Name %> 
<% } %> 
+1

私はこのアプローチを推奨しますが、モデルではなくViewDataで新しいクラスに接尾辞を付けます。 –

+0

私は同意する、このアプローチは有利な場合。 –

+0

これは良いですが、私はまだこれを行うために私を変更していませんが、それは私が実際に必要としなかった全体のルーチンを削除したリファクタリングを通過するようになった。また、ASP.NETのWebサイトでは最近、新しいチュートリアルが追加されました。http://www.asp.net/learn/mvc/ –

2
ViewData["Movies"] = //Function to get Movies; 
ViewData["Actors"] = //Function to get Actors; 

return View(); 

EDIT:あなたのテーブルに設定したキーをforiegnしていると仮定すると、同じことを達成する

var movies = /*Function to get Movies*/ as Movies; 
movies.Actors.Load(); 

:あなたのデータベースで設定関係を持っている場合は、のような何かを行うことができ

あるいは、 。

そして、あなたのビューで、あなたはどうなる:あなたのコントローラのアクションで、その後

public class MoviesAndActorsModel 
{ 
    public IList<Movie> Movies { get; set; } 
    public IList<Actor> Actors { get; set; } 
} 

<% 
    var movies = ViewData["Movies"] as Movies; 
    var actors = ViewData["Actors"] as Actors; 
%> 
+4

私はハードコードされた文字列を避け、ViewDataプロパティにアクセスしようとします。 ViewDataに保存する場合は、カスタムモデルクラスを作成して、厳密に型指定されているようにします。 –

+0

それは実際にはるかに良くなっているようです(私はなぜ、それはしません)、私はいずれかの方法が私の壊れていないか何かとして動作すると仮定しています。私は同じ問題を抱えていました。Scott Guthrieのブログでは、これが彼が持っていたサンプルアプリケーションのためにやっていたことが分かりました。私はあなたの道がうまくいくのが好きです。 –

0

わずかに異なる問題についてdhulkのソリューションの変化を示しtutorial on http://asp.net/mvcが、あります:いくつかを返す方法各ビューで使用される共通データ(例:マスターページによって)、それぞれのアクションメソッドから重複したコードを大量に使用することなく実行できます。

このチュートリアルでは、共通/共有データをビューに返す処理を行う、いわゆるアプリケーションコントローラ(すべてのコントローラの基本クラス)を紹介します。

関連する問題