我有一个使用主题的网站。根据网址(如果是A.something.com或B.something.com,其中A和B代表客户端),我将加载不同的主题。目的是为不同的客户端使用一个代码库。我有一个app_themes文件夹,里面有几个主题,针对不同的客户端,以及每个主题的不同CSS文件(出于商业原因,CSS文件对于每个主题是相同的,但是重复)。所以我的代码看起来像这样:
Public Overrides Property StyleSheetTheme()As String
Get
Dim myHost As String = Request.Url.Host
Return myHost
End Get
Set(ByVal value As String)
End Set
End Property
Protected Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreInit
If Request.Url.Host.Contains("Savills") Then
Page.Theme = "Savills"
ElseIf Request.Url.Host.Contains("localhost") Then
Page.Theme = "localhost"
ElseIf Request.Url.Host.Contains("test.concepglobal.com") Then
Page.Theme = "test.concepglobal.com"
ElseIf Request.Url.Host.Contains("concepglobal") Then
Page.Theme = "concepglobal"
End If
End Sub
我的app_themes文件夹结构:
App_Themes文件:
本地主机:
Default.css
第一太平
Savills.css
但是,每次加载网站时,都不会收到css。所以我没有得到我在css中设计的h1样式(它在那里),但只有aspx页面中指定的图形。
运行网站时我的来源:
(在该网址加载网站)。
令人困惑的是,还有另一个链接到同一个css:
我做错了什么?
谢谢
答案 0 :(得分:2)
只有在Visual Studio中运行代码时才会发生这种情况吗?
在ASP.Net Development Server中运行时,App_Themes中的样式不会在任何未经身份验证的页面上使用(例如Login.aspx或ForgotPassword.aspx)。这是因为用户尚未对该文件夹具有浏览权限,或者App_Themes文件夹缺少浏览权限。显然,IIS会处理这个问题,但Cassini不会这样做。
尝试将此添加到web.config,以便在身份验证之前使主题和样式有效。
<location path="App_Themes">
<system.web>
<authorization>
<allow users="?" />
</authorization>
</system.web>
</location>
或者,如果可能,请切换到在计算机上的IIS上运行应用程序。
答案 1 :(得分:0)
您可以通过web.config指定应用程序(或文件夹)使用的主题,而不是通过代码执行此操作:
<system.web>
<pages theme="concepglobal"></pages>
</system.web>
这假设您为每个客户端提供了不同的web.config文件。