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