2011-03-11 91 views
1

我目前正在处理ASP.Net MVC 3和Razor模板引擎,但我遇到了一个我无法完全掌握的问题 - 所以结束了StackOverflow社区来帮忙!Razor中的嵌套显示模板

比方说,我有一个视图模型的层次结构,看起来像这样:

public class Foo { 
    public string FooTitle { get; set; } 
    [UIHint("BarList")] 
    public IList<Bar> BarList { get; set; } 
} 

public class Bar { 
    public string BarTitle { get; set; } 
} 

都相当简单,我相信你会同意。要使用该视图模型我有以下几点:

〜/浏览/首页/ Index.cshtml

@model Foo 

<h1>@Model.FooTitle</h1> 
@Html.DisplayFor(m => m.BarList) 

〜/浏览/首页/ DisplayTemplates/BarList.cshtml

@model IEnumerable<Bar> 

<div class="bar-list"> 
@Html.DisplayForModel() 
</div> 

〜/浏览/首页/ DisplayTemplates/Bar.cshtml

@model Bar 

<p>@Model.BarTitle</p> 

我希望找到的Bar.cshtml的要显示的内容,当我执行我的视图,但渲染似乎没有窝进一步指出BarList.cshtml

我在做什么错在这里?

回答

3

如果你按照约定你不需要中介BarList.cshtml模板也不UIHint

public class Foo { 
    public string FooTitle { get; set; } 
    public IList<Bar> BarList { get; set; } 
} 

public class Bar { 
    public string BarTitle { get; set; } 
} 

视图(~/Views/Home/Index.cshtml):

@model Foo 
<h1>@Model.FooTitle</h1> 
<div class="bar-list"> 
    @Html.DisplayFor(m => m.BarList) 
</div> 

显示模板(~/Views/Home/DisplayTemplates/Bar.cshtml):

@model Bar 
<p>@Model.BarTitle</p> 

和0123将自动为BarList集合的每个元素呈现模板。

+0

我知道这一点,但我有我想在属于此控制器的不同视图中重新使用该列表的情况,并且我不希望每次都必须指定包含的

2011-03-11 13:14:28

0

移动所有这些显示模板到: 〜/查看/ 共享/DisplayTemplates/

编辑:关于通过各条迭代是什么?

@model IEnumerable<Bar> 
<div class="bar-list"> 
@foreach (var bar in Model) { 
    @Html.DisplayForModel(bar) 
} 
</div> 
+0

将模板移至共享而不是特定视图不能解决我的问题。 – 2011-03-28 09:43:12

+0

奇怪。我在我的应用程序中完成了完全相同的事情,并且工作正常。试试上面的代码 – woopstash 2011-03-28 17:36:02

1

我怀疑你仍然有这个问题,但是这是正确的解决方案

〜/浏览/首页/ DisplayTemplates/BarList.cshtml

@model IEnumerable<Bar> 
<div class="bar-list"> 
@foreach (var bar in Model) { 
    @Html.DisplayFor(c => bar) 
} 
</div>