在ASP.NET中动态设置主题
我有一个不同域连接的应用程序,而不是复制和修改每个应用程序,我在硬盘驱动器上使用相同的物理位置,但在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代码示例 注意:主题必须存在,否则你会得到一个例外:在应用程序或全局主题目录中找不到主题’ThemeName’.如果你想要一个默认主题或没有主题,如果主题不存在,请将其包装在try / catch块并使用catch块设置默认主题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-4 – 发布后保留表单值(不是模型的一部分)
- asp.net – 无法获取项目引用的依赖项
- asp.net-mvc – 带.Net MVC的JQuery UI自动完成:如何在选中
- asp.net-mvc – 如何修复错误名称空间’System’中不存在类
- context.Request.Files超过了最大请求长度
- asp.net – nhibernate死锁
- asp.net – 通过sql servers SP在aspnet成员中添加用户和分
- .net – 参考WCF最佳实践项目
- ASP.NET MVC5 中百度ueditor富文本编辑器的使用(转)
- asp.net-mvc – 带有Base64编码的JsonResult