Asp.net mvc 3 Razor中的嵌套显示模板

Asp.net mvc 3 Razor中的嵌套显示模板,asp.net-mvc-3,razor,Asp.net Mvc 3,Razor,我目前正在学习ASP.Net MVC 3和Razor模板引擎,但我遇到了一个我不能完全掌握的问题-请转到StackOverflow社区来帮助我 假设我有一个视图模型层次结构,如下所示: public class Foo { public string FooTitle { get; set; } [UIHint("BarList")] public IList<Bar> BarList { get; set; } } public class Bar {

我目前正在学习ASP.Net MVC 3和Razor模板引擎,但我遇到了一个我不能完全掌握的问题-请转到StackOverflow社区来帮助我

假设我有一个视图模型层次结构,如下所示:

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

public class Bar {
    public string BarTitle { get; set; }
}
公共类Foo{
公共字符串FooTitle{get;set;}
[UIHint(“BarList”)]
公共IList条列表{get;set;}
}
公共类酒吧{
公共字符串BarTitle{get;set;}
}
一切都很简单,我相信你会同意的。要使用此视图模型,我有以下几点:

~/Views/Home/Index.cshtml

@model Foo

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

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

<p>@Model.BarTitle</p>
@model IEnumerable<Bar>
<div class="bar-list">
@foreach (var bar in Model) {
    @Html.DisplayFor(c => bar)
}
</div>
@model Foo
@Model.FooTitle
@DisplayFor(m=>m.BarList)
~/Views/Home/DisplayTemplates/BarList.cshtml

@model Foo

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

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

<p>@Model.BarTitle</p>
@model IEnumerable<Bar>
<div class="bar-list">
@foreach (var bar in Model) {
    @Html.DisplayFor(c => bar)
}
</div>
@model IEnumerable
@Html.DisplayForModel()
~/Views/Home/DisplayTemplates/Bar.cshtml

@model Foo

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

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

<p>@Model.BarTitle</p>
@model IEnumerable<Bar>
<div class="bar-list">
@foreach (var bar in Model) {
    @Html.DisplayFor(c => bar)
}
</div>
@模型栏
@巴蒂尔模型

我希望在执行视图时可以找到要显示的
Bar.cshtml
的内容,但渲染似乎没有比
BarList.cshtml


我在这里做错了什么?

如果您遵循以下约定,则不需要中介
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/DisplayTemplates/Bar.cshtml
):

@模型栏
@巴蒂尔模型


并且
Bar.cshtml
模板将自动为
BarList
集合的每个元素呈现。

如果遵循以下约定,则不需要中介
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/DisplayTemplates/Bar.cshtml
):

@模型栏
@巴蒂尔模型


Bar.cshtml
模板将自动为
BarList
集合的每个元素呈现。

将所有这些显示模板移动到: ~/Views/共享的/DisplayTemplates/

编辑:遍历每个条怎么样

@model IEnumerable<Bar>
<div class="bar-list">
@foreach (var bar in Model) {
    @Html.DisplayForModel(bar)
}
</div>
@model IEnumerable
@foreach(模型中的var条){
@Html.DisplayForModel(条形图)
}

将所有这些显示模板移动到: ~/Views/共享的/DisplayTemplates/

编辑:遍历每个条怎么样

@model IEnumerable<Bar>
<div class="bar-list">
@foreach (var bar in Model) {
    @Html.DisplayForModel(bar)
}
</div>
@model IEnumerable
@foreach(模型中的var条){
@Html.DisplayForModel(条形图)
}

我怀疑您仍然存在此问题,但这是正确的解决方案

~/Views/Home/DisplayTemplates/BarList.cshtml

@model Foo

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

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

<p>@Model.BarTitle</p>
@model IEnumerable<Bar>
<div class="bar-list">
@foreach (var bar in Model) {
    @Html.DisplayFor(c => bar)
}
</div>
@model IEnumerable
@foreach(模型中的var条){
@DisplayFor(c=>bar)
}

我怀疑您仍然存在此问题,但这是正确的解决方案

~/Views/Home/DisplayTemplates/BarList.cshtml

@model Foo

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

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

<p>@Model.BarTitle</p>
@model IEnumerable<Bar>
<div class="bar-list">
@foreach (var bar in Model) {
    @Html.DisplayFor(c => bar)
}
</div>
@model IEnumerable
@foreach(模型中的var条){
@DisplayFor(c=>bar)
}

我知道这一点,但我想在属于此控制器的不同视图中重复使用列表,我不想每次都必须指定封闭,但我想在属于此控制器的不同视图中重复使用列表,我不想每次都必须指定封闭,将模板移动到共享而不是特定视图并不能解决我的问题。奇怪。我在我的应用程序中做了完全相同的事情,效果很好。尝试上面的代码将模板移动到共享而不是特定视图并不能解决我的问题。奇怪。我在我的应用程序中做了完全相同的事情,效果很好。试试上面的代码