Я думаю, вам нужно позвонить .Init с новым IViewComponentContext
.
component.Init(EngineContext, newViewComponentContext);
теперь реализации для IViewComponentContext
находятся в различных движках представления. Проблема в том, что я не знаком с внутренностями NVelocity, поэтому я не уверен, как это сделать с NV, вам понадобится дополнительный вопрос.
Возможный обходной путь:
Вы можете иметь общий шаблон представления, который вызывает компонент, имя которого передается представлению в качестве параметра.
В AspView это будет выглядеть примерно так:
// in the calling component
PropertyBag["componentName"] = "theOtherComponent";
PropertyBag["componentParams"] = new Hashtable{{age,30},{name,"Ken"}};
var componentOutput = RenderViewInPlace("/shared/render_component");
// in render_component.aspx
<% InvokeViewComponent(Properties["componentName"], Properties["componentParams"], null, null); %>
Этот подход должен работать теоретически, предполагая, что NV может получить параметр для #blockcomponent (снова - еще один дополнительный вопрос, извините)