2012-05-10 47 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"); 
}