Визуализация ViewComponent из другого компонента кода - PullRequest
0 голосов
/ 05 мая 2010

Я пытаюсь визуализировать компонент из другого компонента.

public override void Render()
// ...
    var block = new Block();
    block.Init(EngineContext, Context);
    block.Render();
// ...
}

Проблема в том, что компоненту блока не удается найти свой шаблон.

ResourceProcessingException Сообщение: невозможно обработатьресурс 'components \ CustomReportComponentComponent \ default.vm': ресурс не может быть найден

Я думаю, могут возникнуть другие проблемы, поскольку компонент не инициализирован должным образом.

Возможно ли инициализировать компонентиз метода Render другого компонента, поэтому он визуализируется так же, как если бы он вызывался из .vm?

1 Ответ

0 голосов
/ 06 мая 2010

Я думаю, вам нужно позвонить .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 (снова - еще один дополнительный вопрос, извините)

...