Sto tentando di scrivere un metodo che produrrà il contenuto (ad esempio HTML) per tutti i rendering che si verificano all'interno di un segnaposto specifico. L'obiettivo è passare un Sitecore.Data.Items.Item
e la chiave segnaposto a cui sono interessato, e il metodo dovrebbe restituire il contenuto visualizzato.Come ottenere il contenuto del rendering a livello di programmazione?
Il problema con questo sembra essere che non è stato stabilito alcun contesto di pagina e pertanto chiamare RenderControl()
genera un errore di riferimento null nel metodo GetCacheKey()
del Sottotesto.
Qualcuno è a conoscenza di un modo per visualizzare a livello di codice un rendering Sottotesto o XSLT?
Ecco quello che ho finora:
private string GetPlaceholderContent(Item item, string placeHolder)
{
StringWriter sw = new StringWriter();
using (HtmlTextWriter writer = new HtmlTextWriter(sw))
{
foreach (RenderingReference renderingReference in item.Visualization.GetRenderings(Sitecore.Context.Device, false))
{
if (renderingReference.Placeholder == placeHolder)
{
// This ensures we're only dealing with Sublayouts
if (renderingReference.RenderingItem.InnerItem.IsOfType(Sitecore.TemplateIDs.Sublayout))
{
var control = renderingReference.GetControl();
control.RenderControl(writer); // Throws null reference error in GetCacheKey()
}
}
}
}
return sw.ToString();
}
Stai eseguendo questo codice all'interno di un'applicazione Sitecore? Quindi ti aspetti che ci sia un contesto o un'altra applicazione in comune e hai bisogno di un modo per creare manualmente un contesto? –
Beh ... certo che c'è un modo per farlo ... perché internamente questo è esattamente ciò che sta facendo Sitecore. Suggerisco qualche esplorazione intensiva con ILSpy o Reflector. Metti il tuo elmetto spelunking e poi controlla la sezione renderLayout in. –
Bryan
Forse l'opzione sarebbe aggiungere alcuni marcatori attorno al markup del segnaposto ed eseguire la richiesta all'elemento dal codice e quindi tagliare la risposta per ottenere solo la parte dell'html a cui sei interessato? –