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?

War es hilfreich?

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)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top