如何在“网关”中为 ASP.NET 站点设置主题 页?

发布于 2024-07-12 07:25:38 字数 1063 浏览 9 评论 0原文

我希望能够在网关页面中设置 ASP.NET 主题,该主题将根据合作伙伴 ID 或类似内容确定主题。 我想我只需将主题名称粘贴在会话中,并在需要时从那里获取它。

我无法找到将此代码放在一个地方的正确位置。

我似乎看不到可以设置主题的全局位置。 您必须为每个页面设置它。

MSDN 中所述您可以在页面的 PreInit 函数中分配 Theme 属性。

Protected void Page_PreInit(object sender, EventArgs e)
{
    switch (Request.QueryString["theme"])
    {
        case "Blue":
           Page.Theme = "BlueTheme";
            break;

        case "Pink":
           Page.Theme = "PinkTheme";
            break;
    }
}

所以我想好吧 - 我会在我的主页中这样做。 不幸的是,将完全相同的代码复制到母版页中不起作用。 所以我想 - 嗯,也许母版页不使用这个事件。 事实证明这是真的。

我真的不想把这个主题代码放在每个内容页面上。 这看起来完全是愚蠢的。 但我还找不到其他方法。 MSDN仅描述了两个将主题应用到页面的方法——在 web.config 中或使用 Page.Theme。

我是否必须创建 Page 的子类并使我的所有页面都成为该页面的子类,并覆盖该子类中的 PreInit? 我想我一定错过了一些东西,因为我无法想象微软真的希望人们在每个内容页面上以编程方式设置主题。

I want to be able to set an ASP.NET Theme in a gateway page, which will determine the theme based upon a partner id or something like that. I figure I'd just stick the theme name in session and get it from there if I need it.

I'm having trouble finding the right place to put this code in a single place.

I cannot seem to see a global place you can set Theme. You have to set it for each page.

As described in MSDN you can assign the Theme property in the PreInit function for a page.

Protected void Page_PreInit(object sender, EventArgs e)
{
    switch (Request.QueryString["theme"])
    {
        case "Blue":
           Page.Theme = "BlueTheme";
            break;

        case "Pink":
           Page.Theme = "PinkTheme";
            break;
    }
}

So i thought ok - i'll just do that in my master page. Unfortunately copying this exact same code into a master page doesn't work. So I thought - hmm maybe master pages dont use this event. It turns out this is true.

I REALLY dont want to have to put this theme code on every content page. That seems completely stupid. But I cannot yet find anopther way. MSDN describes only two ways to apply a theme to a page -- in the web.config or with Page.Theme.

Am i going to have to create a subclass of Page and have all my pages subclass that page, and override PreInit in that subclass? I think I must be missing something becasue I cant imagine MS really expects people to set Theme programatically on every content page.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

千仐 2024-07-19 07:25:39

如果您的网站使用干净的标记,您可以根据查询字符串、浏览器类型、登录信息等轻松切换样式表。

使用 CSS 可以在将来为您节省大量时间,而不是创建新的主题/母版页/标记...等。

If your site uses clean markup you could just as easily switch style sheets based on the querystring, browser type, login info etc.

Using CSS could save you alot of time in the future over creating new themes/masterpages/markup... etc.

箹锭⒈辈孓 2024-07-19 07:25:38

一种选择是创建您自己的页面基类并在那里处理主题切换/设置。 然后使用该类作为所有页面的基类。

public class PageBase : Page
{
  protected void Page_PreInit(object sender, EventArgs e)
  {
    //..
    Page.Theme = "BlueTheme";
    //..
  }
}


public class MyPageOne : PageBase
{
 ...
}

One option would be to create your own Page base class and handle the theme switching/setting there. Then use that class as the base class of all your pages.

public class PageBase : Page
{
  protected void Page_PreInit(object sender, EventArgs e)
  {
    //..
    Page.Theme = "BlueTheme";
    //..
  }
}


public class MyPageOne : PageBase
{
 ...
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文