Темы страницы должны быть установлены в событии Page_PreInit в asp.net
К сожалению, мастер-страницы не имеют события Page_PreInit, и именно здесь вам нужно установить тему.
Это ограничение самих главных страниц, а не Sitefinity.
Однако можно установить тему во время выполнения, создав специальный обработчик маршрута для перехвата запроса и изменения темы на лету.
сначала создайте собственный класс маршрута:
public class CustomRouteHandler : PageRouteHandler
{
protected override void SetPageDirectives(Page handler, IPageData pageData)
{
base.SetPageDirectives(handler, pageData);
var url = HttpContext.Current.Request.RawUrl.ToLower();
var themeName = "AlternativeTheme";
if (url.StartsWith("/alternative"))
ThemeController.SetPageTheme(themeName, handler);
}
public static void RegisterType()
{
ObjectFactory.Container.RegisterType<PageRouteHandler, CustomRouteHandler>();
}
}
Затем вам нужно зарегистрировать этот маршрут в файле Global.asax:
public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
Telerik.Sitefinity.Services.SystemManager.ApplicationStart += SystemManager_ApplicationStart;
}
void SystemManager_ApplicationStart(object sender, EventArgs e)
{
CustomRouteHandler.RegisterType();
}
}
Теперь каждый запрос будет проходить через этот обработчик, и вы сможете изменять тему в зависимости от любых пользовательских условий.
Я планирую собрать сообщение в блоге и видео, в котором более подробно рассказывается о том, как это делается и что вы можете с этим сделать, но это основная идея о том, как это работает.
Надеюсь, это полезно!