2011-12-15 11 views
2

私はHomeControllerを持っています。インデックスアクションでは、複数のオブジェクトで作業したいと思います。例えば、News、Pictures、PortfolioをHomePageに表示します。では、どのようにViewに複数のObjectを渡すことができますか?MVC 3複数のオブジェクトを持つインデックスページ

public ActionResult Index() 
{ 
      var news = newsRepository.GetAll(); 
      return View(news); 
} 

以上、私はNewsオブジェクトのみを渡すことができます。しかし、あなたがホームページのホームページで知っているように、ただ1つ以上のオブジェクトがあります。

私がニュースでのみ動作するとき、私はコントローラから "IEnumerable"を渡すことができます。しかし、ビュー内に複数のオブジェクトを宣言するには、どうすればよいですか?申し訳ありません、私はMVC3の初心者です。 WebFormsでは、ユーザーコントロールや.NETコントロールで簡単でしたが、MVCでは複雑に見えます。

おかげ

答えて

3

私はこの問題を解決するために何を使用すると、ビューに渡したいオブジェクトを含むプロパティを持つビューモデルを使用しています。

これらのクラスのViewModelフォルダを作成します。

public class IndexViewModel 
{ 
    public PortfolioViewModel Portfolio {get; set;} 
    public IEnumerable<PhotosViewModel> Photos {get; set;} 
    public IEnumerable<NewsViewModel> News {get; set;} 
    //.../// 
} 

お使いのコントローラにあります。

public ActionResult Index() 
{ 
    var model = new IndexViewModel(); 
    model.news = newsRepository.GetAll(); 
    return View(model); 
} 
+0

ビューの場合は、 "IEnumerable "またはIndexViewModelだけのように渡す必要がありますか? – mehmetserif

+1

オブジェクトだけです。 @model IndexViewModelのようになります – Dean

2

すべてsubclasses-モデルでモデルを作成し、ビューに送信します。

public class A 
{ 
    public int Code {get; set;} 
    public string Name {get; set;} 
} 

public class B 
{ 
    public int First {get; set;} 
    public int Second {get; set;} 
} 

public class ViewModel 
{ 
    public A TheA {get; set;} 
    public B TheB {get; set;} 
} 

public ActionResult Index() 
{ 
     var model = new ViewModel(); 
     return View(model); 
} 
+0

人々は本当になぜ彼らがdownvoteを説明する必要があります! – gdoron

1

複数のオブジェクトを格納するためにViewDataを使用できます。しかし、より良い選択肢は、ビューに渡す必要がある他のすべてのオブジェクトを格納するクラスを作成することです。

2

ChildActionを使用すると、ユーザーコントロールに似たものを効果的に作成できます。

ニュース、写真、ポートフォリオのビュー/モデル/コントローラは別々のままです。あなたがそのようにのようなホーム・ページでそれらを組み合わせることができ

@Html.Action("Index", "News") 
@Html.Action("Index", "Pictures") 
@Html.Action("Index", "Portfolio") 
関連する問題