2012-05-10 14 views
0

私が一度定義したいと思っているような複雑なレイアウトを繰り返しているのであれば、箱の空想的なグリッドを考えてみてください。グリッド(グリッド内ではない)、例えば1つのページには製品サマリのファンシーグリッドがあり、別のページにはカテゴリ紹介のファンシーグリッドがあります。 MVC3を実装するための最も賢明なパターンは何ですか?ASP内のビュー内でのビューの繰り返しMVC3

答えて

2

ディスプレイテンプレートを使用できます。

public class MyViewModel 
{ 
    public IEnumerable<SomeViewModel> Models { get; set; } 
} 

とビューでDisplayForヘルパーを使用します:たとえばタイプEnumerable<SomeViewModel>であり、あなたのビューモデルのプロパティを定義する

@model MyViewModel 
@Html.DisplayFor(x => x.Models) 

は自動的用にレンダリングされるカスタム表示テンプレートを定義しますモデルコレクションの各要素(~/Views/Shared/DisplayTemplates/SomeViewModel.cshtml):

@model SomeViewModel 
<div> 
    @Html.DisplayFor(x => x.SomeProperty) 
    ... 
</div> 

を鋳型ヘルパーが慣例で動作します。既定では、最初に~/Views/CurrentController/DisplayTemplatesフォルダー、次に~/Views/Shared/DisplayTemplatesフォルダーにコレクションプロパティ(SomeViewModel.cshtml)の名​​前と同じ名前のテンプレートが表示されます。

+0

を.DisplayFor(x => x.Models)の場合、グリッドレイアウトを定義するループはどこに収まるのですか? – stovroz

+0

どこにもありません。それはあなたのために自動的にそれを行い、各アイテムのために表示テンプレートをレンダリングするフレームワークです。ループを記述する必要はありません。 ASP.NET MVCは、モデルが 'IEnumerable 'を実装していることを自動的に認識しますので、ループします。それは慣習によって動作します。すべてが設定上の慣例です。 –

+0

しかし、グリッドのHTMLはどこにありますか? – stovroz

0

繰り返しセクションを部分ビューに移動することができます。そして、部分図はどこにでも

0

ストア・コントローラーでのアクションGenreMenu再利用できること:Viewで

[ChildActionOnly] 
    public ActionResult GenreMenu() 
    { 
     var genres = storeDB.Genres.ToList(); 

     return PartialView(genres); 
    } 

これは部分図を3回繰り返すことになります:私は@htmlを行う場合は、申し訳ありません

@for (int i = 0; i < 3; i++) 
{ 
Html.RenderAction("GenreMenu", "Store"); 
} 
関連する問題