2012-05-10 124 views
0

如果我有一个精心制作的重复布局,我只想定义一次,请说出一些花哨的方格框,但这些方框的内容在视图和模型中都会从网格到网格(但不在网格内),例如一页有一个产品摘要的花式网格,另一页有一个类别介绍的花式网格。实现MVC3最明智的模式是什么?在ASP MVC3视图中重复查看

回答

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)命名方式相同的模板。

+0

对不起,如果我做@Html .DisplayFor(x => x.Models),那么定义我的网格布局的循环在哪里适合? – stovroz

+0

无处。它是自动为您做的并为每个项目呈现显示模板的框架。你不需要编写任何循环。 ASP.NET MVC自动识别模型实现'IEnumerable ',因此它会循环。它按照惯例工作。一切都是以配置为基础的。 –

+0

但网格的html在哪里生活? – stovroz

0

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

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"); 
}