Изменение элементов управления страницы из класса вспомогательных функций Xslt в Sitecore - PullRequest
3 голосов
/ 21 января 2011

В рендере xslt я вызываю следующее

<xsl:value-of select="di:inject()"/>

Соответствующий класс извлекает объект текущей страницы и пытается изменить заголовок страницы

public class XslHelper : Sitecore.Xml.Xsl.XslHelper
{
    public void inject()
    {
        Page page = HttpContext.Current.Handler as Page;

        // page.GetType().FullName tells me that I have successfully got the reference

        page.Header.Controls.Add(new HtmlLink { Href = "/style.css" });
    }
}

Однако заголовок не обновляется? Почему это так и есть ли другой способ достичь того же результата?

РЕДАКТИРОВАТЬ: В итоге мы расширили шаблон XslRender и сохранили там зависимости, которые затем могут быть выбраны и добавлены в сеанс путем переопределения класса InsertRenderings в конвейере renderLayout. Затем к объекту сеанса можно получить доступ к Page_Load в макете, который может получить доступ к заголовку страницы.

Ответы [ 2 ]

3 голосов
/ 21 января 2011

Я подозреваю, что уже слишком поздно что-либо добавлять в головную часть при рендеринге XSL.Кроме того, единственный вариант - переключиться на подслой и сделать это в Page_Load или что-то в этом роде.

Не могу доказать мой ответ - это просто внутреннее чувство.Поэтому +1 к вопросу и добавлен в избранное; -)

0 голосов
/ 22 января 2011

Возможно, вам было бы лучше, если бы все ваши классы были в одном статическом CSS-файле.Дополнительные издержки HTTP-запросов и загрузки процессора затрудняют обоснование преимуществ, полученных при динамической загрузке CSS.

...