Domanda

Sto cercando di rendere un componente dalla withing un altro componente.

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

Il problema è che componente Block non riesce a trovarlo del modello.

ResourceProcessingException Messaggio: Impossibile risorsa processo 'componenti \ CustomReportComponentComponent \ default.vm': Risorsa non poteva essere situato

Credo, altri problemi possono sorgere in quanto il componente non è inizializzato correttamente.

E 'possibile inizializzare un componente all'interno di un altro componente Render metodo, in modo che rende proprio come se chiamato da un .vm?

È stato utile?

Soluzione

Credo che hai bisogno di chiamare .init con un nuovo IViewComponentContext.

  component.Init(EngineContext, newViewComponentContext);

ora le implementazioni per IViewComponentContext sono all'interno dei vari motori di vista. Il problema è -. Non ho familiarità con interni di NVelocity quindi non posso essere sicuro circa il modo di farlo con NV, avresti bisogno di un follow-up domanda

Una soluzione possibile: Si può avere un modello di vista condiviso, che chiama un componente, il cui nome è passato alla vista come parametro.

In AspView sarebbe simile a:

// 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); %>

Questo approccio dovrebbe funzionare in teoria, assumendo NV può ottenere un parametro per #blockcomponent (ancora una volta - è necessaria un'altra domanda di follow-up, sorry)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top