Вложенные шаблоны отображения в бритве - PullRequest
1 голос
/ 11 марта 2011

В настоящее время я вхожу в борьбу с ASP.Net MVC 3 и движком шаблонов Razor, но я столкнулся с проблемой, с которой я не могу полностью разобраться - поэтому обращайтесь к сообществу StackOverflow, чтобы помочь!

Допустим, у меня есть иерархия View Model, которая выглядит следующим образом:

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

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

все довольно просто, я уверен, что вы согласитесь. Чтобы перейти с этой моделью просмотра у меня есть следующее:

~ / Views / Home / Index.cshtml

@model Foo

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

~ / Views / Home / DisplayTemplates / BarList.cshtml

@model IEnumerable<Bar>

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

~ / Views / Home / DisplayTemplates / Bar.cshtml

@model Bar

<p>@Model.BarTitle</p>

Я ожидал бы найти содержимое Bar.cshtml, которое будет отображаться при выполнении моего просмотра, но рендеринг, похоже, не будет дальше, чем BarList.cshtml

Что я здесь не так делаю?

Ответы [ 3 ]

3 голосов
/ 11 марта 2011

Вам не нужен шаблон 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>

и шаблон Bar.cshtml будут автоматически отображаться для каждого элемента коллекции BarList.

1 голос
/ 17 февраля 2012

Я сомневаюсь, что у вас все еще есть эта проблема, но это правильное решение

~ / Views / Home / DisplayTemplates / BarList.cshtml

@model IEnumerable<Bar>
<div class="bar-list">
@foreach (var bar in Model) {
    @Html.DisplayFor(c => bar)
}
</div>
0 голосов
/ 26 марта 2011

Переместите все эти шаблоны отображения в: ~ / Views / Общий / DisplayTemplates /

Редактировать: Как насчет итерации по каждому бару?

@model IEnumerable<Bar>
<div class="bar-list">
@foreach (var bar in Model) {
    @Html.DisplayForModel(bar)
}
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...