Ich versuche eine Methode zu schreiben, die den Inhalt (d. H. HTML) für alle Renderings ausgeben wird, die in einem bestimmten Platzhalter vorkommen. Das Ziel besteht darin, einen Sitecore.Data.Items.Item
und den Platzhalterschlüssel, an dem ich interessiert bin, zu übergeben, und die Methode sollte den gerenderten Inhalt zurückgeben.Wie bekomme ich Inhalt des Renderings programmgesteuert?
Das Problem damit scheint zu sein, dass es keinen Seitenkontext gibt, und daher Aufruf RenderControl()
wirft einen Null-Referenzfehler in der GetCacheKey()
Methode des Sublayout.
Kennt jemand eine Möglichkeit, ein Sublayout- oder XSLT-Rendering programmgesteuert zu rendern?
Hier ist, was ich bisher habe:
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();
}
Führen Sie diesen Code in einer Sitecore-Anwendung aus? Erwarten Sie also, dass es einen Kontext gibt oder ist es eine andere Anwendung, und Sie benötigen eine Möglichkeit, einen Kontext manuell zu erstellen? –
Nun ... natürlich gibt es einen Weg, es zu tun ... weil intern genau das ist, was Sitecore macht. Ich schlage eine intensive Auseinandersetzung mit ILSpy oder Reflector vor. Setzen Sie Ihren Spelunking-Helm auf und sehen Sie sich dann den Bereich renderLayout in an. –
Bryan
Vielleicht wäre die Option, einige Markierungen um das Platzhalter-Markup hinzuzufügen und die Anfrage an das Element aus dem Code auszuführen und dann die Antwort zu kürzen, um nur den Teil des HTML zu erhalten, an dem Sie interessiert sind? –