Sitefinity 4以编程方式设置主题名称

问题描述

| 在SiteFinity 4中,我们可以在用作页面模板的母版页加载中设置主题名称吗? 最好的祝愿, 秋树     

解决方法

        需要在asp.net的Page_PreInit事件中设置页面主题 不幸的是,母版页没有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();
    }
}
现在,每个请求都将通过该处理程序,您可以根据所需的任何自定义条件修改主题。 我计划将博客文章和视频放在一起,以更详细地说明如何完成此操作以及您可以如何使用它,但这是其工作原理的基本概念。 我希望这是有帮助的!     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...