Render ViewComponent von einer anderen Komponente Code-Behind
-
03-10-2019 - |
Frage
Ich versuche, eine Komponente von withing einer anderen Komponente zu machen.
public override void Render()
// ...
var block = new Block();
block.Init(EngineContext, Context);
block.Render();
// ...
}
Das Problem ist, dass Block-Komponente kann die Vorlage nicht gefunden.
ResourceProcessingException Nachricht: Kann nicht Prozessressource 'components \ CustomReportComponentComponent \ default.vm': Ressource konnte nicht gefunden werden
Ich denke, können andere Probleme auftreten, da die Komponente nicht richtig initialisiert wird.
Ist es möglich, eine Komponente aus einem anderen Komponente der Render-Methode zu initialisieren, so dass es, wenn von einem .vm genannt genauso macht?
Lösung
Ich glaube, Sie brauchen .Init mit einem neuen IViewComponentContext
zu nennen.
component.Init(EngineContext, newViewComponentContext);
jetzt die Implementierungen für IViewComponentContext
sind innerhalb der verschiedenen Ansicht Motoren. Das Problem ist, -. Ich bin nicht vertraut mit NVelocity Interna so dass ich nicht sicher über die Art und Weise sein kann zu tun, dass mit NV, Sie eine Follow-up-Frage bräuchten
Eine mögliche Abhilfe: Sie können eine gemeinsame Sicht Vorlage haben, die eine Komponente aufruft, dessen Name auf die Ansicht als Parameter übergeben wird.
In AspView wäre es so etwas wie folgt aussehen:
// 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); %>
Dieser Ansatz soll in der Theorie funktionieren, NV unter der Annahme, einen Parameter für #blockcomponent bekommen kann (wieder - Wieder eine Fortsetzung der Frage erforderlich ist, sorry)