加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

在ASP.NET中动态设置主题

发布时间:2020-12-16 06:35:41 所属栏目:asp.Net 来源:网络整理
导读:我有一个不同域连接的应用程序,而不是复制和修改每个应用程序,我在硬盘驱动器上使用相同的物理位置,但在IIS上使用单独的应用程序池和网站. 基本上我想根据主机名更改主题.即.用户来到“websome.com”得到“websome”主题,用户来到“jamessome.com”得到“jam
我有一个不同域连接的应用程序,而不是复制和修改每个应用程序,我在硬盘驱动器上使用相同的物理位置,但在IIS上使用单独的应用程序池和网站.

基本上我想根据主机名更改主题.即.用户来到“websome.com”得到“websome”主题,用户来到“jamessome.com”得到“jamessome”主题.

我在web.config“pages”属性中设置主题,该主题将全局主题应用于整个网站.有什么方法可以根据输入的域名使用来修改飞行设置吗?这可能是可能的,但是什么是缩小尺寸,为了简化解决方案,您建议如何处理小代码.据我所知,如果我每次用户进入时都会编辑web.config会花费大量时间而不是那么优雅……那么任何一个ASP.NET专家都可以编写两行代码来实现神奇的效果吗?

网站上存在这些问题的解决方案很少,但这需要我在网站上的每个页面的Page_Init事件中添加代码,这是不现实的.

解决方法

实际上,它必须在Page_PreInit中设置,如果您尝试更改Page_Init中的主题,它将无法工作.

最常见的解决方案是为所有页面使用父类.这是一次性更改,并将逻辑放在父类中.而不是继承自Page,然后继承自ThemedPage.在类本ThemedPage中,当然继承自Page本身,您可以覆盖Page.OnPreInit方法.

你要求“两行”,如果你删除杂乱,它实际上就是一行.这是VB:

Public Class ThemedPage
    Inherits Page

    Protected Overrides Sub OnPreInit(ByVal e As System.EventArgs)
        Me.Theme = HttpContext.Current.Request.Url.Host.Replace(".com","")
        MyBase.OnPreInit(e)
    End Sub
End Class

而不是这个:

Partial Class _Default
    Inherits System.Web.UI.Page

你现在写这个:

Partial Class _Default
    Inherits ThemedPage

就这样!一次性搜索/替换,你就完成了.为了完整起见,这里是C#的相同(只有类):

// C# version
using System.Web;
using System.Web.UI;

public class ThemedPage : Page
{

    protected override void OnPreInit(System.EventArgs e)
    {
        this.Theme = HttpContext.Current.Request.Url.Host.Replace(".com","");
        base.OnPreInit(e);
    }
}

更新:添加了VB代码示例
更新:添加了C#代码示例

注意:主题必须存在,否则你会得到一个例外:在应用程序或全局主题目录中找不到主题’ThemeName’.如果你想要一个默认主题或没有主题,如果主题不存在,请将其包装在try / catch块并使用catch块设置默认主题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读