На самом деле, он должен быть установлен в 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 #
Примечание: тема должна существовать, в противном случае вы получите исключение: Theme 'ThemeName' cannot be found in the application or global theme directories.
. Если вам нужна тема по умолчанию или нет темы, если тема отсутствует, оберните ее вокруг блока try
/ catch
и используйте блок catch
для установки темы по умолчанию.