Я предлагаю другое решение, полезное еще больше со списками разнородных объектов (то есть подклассами BasketItem), с использованием параметра AdditionalViewData метода DisplayFor
, например:
@DisplayFor(b=>b.Items, new { layout="row" })
таким образом, помощник прекрасно работает с IEnumerable<T>
, вызывая для каждого элемента (подкласса T) относительный DisplayTemplate , передавая ему значения AdditionalViewData в ViewData
словарь.
Шаблон может выводить другой код для разных значений макета.
В приведенном выше примере шаблон с именем View \ Shared \ DisplayTemplates \ BasketItem (или имя подкласса) должен выглядеть следующим образом:
@model MyProject.BasketItem // or BasketItem subclass
@{
string layout = ViewData["layout"] as string ?? "default";
switch(layout)
{
case "row":
<div class="row">
...
</div>
break;
// other layouts
...
default: // strongly recommended a default case
<div class="default-view>
...
</div>
break;
}
}
Настоятельно рекомендуется всегда указывать код по умолчанию.
Надеюсь, это предложение поможет.