Я могу использовать Context.RenderBody () для рендеринга вложенных производных ViewComponent
в переопределении метода Render вы можете использовать что-то вроде
RenderView("header");
RenderBody();
RenderView("footer");
и, возможно, использовать RenderSection может быть полезно, чтобы иметь возможность переопределить некоторые части из шаблона, который вы используете компонент
if(HasSection("header")){
RenderSection("header");
} else {
RenderView("header");
}
также возможно итерировать и изменять контекст:
for(var item in this.SubItems){
PropertyBag["item"] = item;
if(HasSection("item")){
RenderSection("item");
} else {
RenderView("item");
}
}
все эти решения причудливы, но я, как правило, предпочитаю иметь видовой компонент, который принимает целевую модель представления (скажем, HierarchicalMenuViewModel) в качестве параметра и сохраняет логику шаблонов простой, ее проще использовать, и настройка вывода происходит
по крайней мере для простых элементов управления (которые в некоторых случаях заслуживают только макроса или частичного в зависимости от viewengine).
В конце концов, представленные выше концепции viewcomponent все еще хороши, когда вы выполняете управление, требующее дополнительной настройки. Совет заключается в том, чтобы позаботиться о документировании логики рендеринга или о ее простоте (<= 10 строк в методе рендеринга) </p>