私が一度定義したいと思っているような複雑なレイアウトを繰り返しているのであれば、箱の空想的なグリッドを考えてみてください。グリッド(グリッド内ではない)、例えば1つのページには製品サマリのファンシーグリッドがあり、別のページにはカテゴリ紹介のファンシーグリッドがあります。 MVC3を実装するための最も賢明なパターンは何ですか?ASP内のビュー内でのビューの繰り返しMVC3
0
A
答えて
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
繰り返しセクションを部分ビューに移動することができます。そして、部分図はどこにでも
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");
}
を.DisplayFor(x => x.Models)の場合、グリッドレイアウトを定義するループはどこに収まるのですか? – stovroz
どこにもありません。それはあなたのために自動的にそれを行い、各アイテムのために表示テンプレートをレンダリングするフレームワークです。ループを記述する必要はありません。 ASP.NET MVCは、モデルが 'IEnumerable'を実装していることを自動的に認識しますので、ループします。それは慣習によって動作します。すべてが設定上の慣例です。 –
しかし、グリッドのHTMLはどこにありますか? – stovroz