gpt4 book ai didi

asp.net - 在 ASP.NET 中动态设置主题

转载 作者:行者123 更新时间:2023-12-02 16:46:25 24 4
gpt4 key购买 nike

我有一个连接到不同域的应用程序,我没有复制和修改每个应用程序,而是在硬盘驱动器上使用相同的物理位置,但在 IIS 上使用单独的应用程序池和网站。

基本上我想根据主机名更改主题。 IE。用户访问“websome.com”获取“websome”主题,用户访问“jamessome.com”获取“jamessome”主题。

我在 web.config“pages”属性中设置了主题,该属性将主题全局应用到整个网站。有什么方法可以根据输入的域使用动态修改该设置吗?这可能是可能的,但是什么是缩小规模以及您建议用很少的代码做什么以简化解决方案。据我所知,如果我每次用户进入时编辑 web.config 将花费大量时间,这不是那么优雅......所以任何 ASP.NET 专家都可以编写两行代码,这样神奇就会发生?

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

最佳答案

实际上,它必须在Page_PreInit中设置,如果你尝试在Page_Init中更改主题,它将不起作用。

最常见的解决方案是为所有页面使用父类。这是一次性的更改,并将逻辑放置在父类中。您可以继承自 ThemedPage,而不是从 Page 继承。当然,在继承自 Page 本身的 ThemedPage 类中,您可以重写 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 block 中并使用 catch用于设置默认主题的 block 。

关于asp.net - 在 ASP.NET 中动态设置主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1600109/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com