在ASP MVC3中重复视图内的视图

时间:2012-05-10 13:19:30

标签: asp.net-mvc asp.net-mvc-3

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

3 个答案:

答案 0 :(得分: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)相同。

答案 1 :(得分:0)

您可以将重复部分移动到局部视图中。那个局部视图可以在任何地方重复使用

答案 2 :(得分:0)

商店控制器中的动作GenreMenu:

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

        return PartialView(genres);
    }

在视图中,这将重复三次局部视图:

@for (int i = 0; i < 3; i++)
{
 Html.RenderAction("GenreMenu", "Store");
}