如果我有一个精心设计的重复布局,我只想定义一次,比如说一些花哨的方框网格,但这些方框的内容在视图和模型上都会因网格而异(但不在网格内),例如一个页面有一个由产品摘要组成的奇特网格,另一个页面有一个由类别介绍组成的奇特网格。实现该MVC3最合理的模式是什么?
发布于 2012-05-10 13:21:47
您可以使用显示模板。例如,在视图模型上定义一个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-10 13:24:36
可以将重复部分移动到局部视图中。然后,该局部视图可以在任何地方重用
发布于 2012-05-10 15:35:58
存储控制器中的操作GenreMenu:
[ChildActionOnly]
public ActionResult GenreMenu()
{
var genres = storeDB.Genres.ToList();
return PartialView(genres);
}
在视图中,这将重复局部视图三次:
@for (int i = 0; i < 3; i++)
{
Html.RenderAction("GenreMenu", "Store");
}
https://stackoverflow.com/questions/10534876
复制相似问题