0

如果我有一个精心设计的重复布局,我只想定义一次,比如说一些花哨的盒子网格,但是这些盒子的内容在视图和模型中会因网格而异(但不在网格内),例如一个页面有一个fancygrid的产品摘要,另一个页面有一个fancygrid的类别介绍。实现 MVC3 的最明智的模式是什么?

4

3 回答 3

2

您可以使用显示模板。例如,在您的视图模型上定义一个类型为Enumerable<SomeViewModel>

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

并在视图中使用 DisplayFor 助手:

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

然后定义一个自定义显示模板,该模板将自动为 Models 集合 () 的每个元素呈现~/Views/Shared/DisplayTemplates/SomeViewModel.cshtml

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

模板化助手按惯例工作。默认情况下,它将首先在~/Views/CurrentController/DisplayTemplates文件夹中查找,然后在~/Views/Shared/DisplayTemplates文件夹中查找模板,该模板的命名方式与集合属性的类型 ( SomeViewModel.cshtml) 相同。

于 2012-05-10T13:21:46.820 回答
0

Action GenreMenu in Store Controller:

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

        return PartialView(genres);
    }

in the View this will repeat the partial view three times:

@for (int i = 0; i < 3; i++)
{
 Html.RenderAction("GenreMenu", "Store");
}
于 2012-05-10T15:35:57.773 回答
0

您可以将重复部分移动到局部视图中。然后可以在任何地方重用该部分视图

于 2012-05-10T13:24:35.693 回答