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