2012-03-29 16 views
0

今のところC#MVC3では、1つのモデルしか使用していないコントローラを1つ使用しなければなりませんでした。コントローラは複数のモデルを使用していますか?

しかし、私は私のコントローラで2つのモデルにアクセスする必要があると思う。これがMVCパターンで許されているのだろうか?

私はProfileControllerを持っています。 ProfileControllerは、明らかにユーザーのプロファイル情報を表示します。しかし、ユーザーが作成したグループのように、私が見せたい他のデータもあります。そのために私もGroupsModelを持っています。

コントローラから両方のデータを取得するにはどうすればよいですか?

答えて

3

どのコントローラから両方のデータを取得する必要がありますか?

public class MyViewModel 
{ 
    public ProfileModel Profile { get; set; } 
    public GroupsModel Groups { get; set; } 
} 

してから表示するには、このビューモデルを渡す:

public ActionResult ShowProfile() 
{ 
    var model = new MyViewModel(); 
    model.Profile = ... 
    model.Groups = ... 
    return View(model); 
} 

そして今、あなたのビューが強くビューモデルに型付けされます。

ビューモデルを使用することにより

@model MyViewModel 

と表示することができます。

@Html.DisplayFor(x => x.Profile.SomeProperty) 
+0

+1これは私が通常とるアプローチです。 – James

+0

ありがとう、良い説明。私は確かにしたいことが一つだけです。このViewModelを "Models"フォルダに置くことはできますか?または、 "ViewModels"という別のフォルダを作成する方が良いでしょうか? – w00

+0

@ w00 - 個人的には、すべてのモデルを(View/Dataに関係なく)同じフォルダに保存する傾向があります。当然のことながら、例えば、階層化されたアーキテクチャ – James

1

単一のビュー/コントローラにあまりにも多くのデータを入れすぎないと仮定すると、必要なデータを持つ単純なビューモデルを作成してみましょう。

public class ProfileInfo 
{ 
    public Person Person 
    { 
     get; 
     set; 
    } 

    public List<Group> Groups 
    { 
     get; 
     set; 
    } 
} 
関連する問題