【问题标题】:Changing CSS file dynamically动态更改 CSS 文件
【发布时间】:2025-12-23 03:40:06
【问题描述】:

我有一个 webdev 问题

我有近 10,000 个服务器端页面,所有这些都使用相同的样式表。我创建了一个新的服务器端页面,它就像一个动态菜单系统,可以帮助快速轻松地从现有的 10,000 个页面中找到特定页面。

问题是,如果使用旧菜单系统以旧方式访问服务器端页面,它们应该保留旧样式表。但是,如果通过新的菜单系统访问它们,则应使用新的刷新样式表。

编辑 10,000 多页似乎不是一个好选择。解决这个问题的最佳方法是什么?

【问题讨论】:

  • 如果是 php,我将创建一个文件并包含在所有页面中,然后更改一页反映在所有页面中。
  • 嗨 Oshirowanen。你能澄清一些事情吗?新旧页面是否按照不同的规范构建。 IE。他们是否使用不同的模板类型等,所有这些页面是否都使用相同的模板/master_page。此外,它们是否都来自同一个域(旧的和新的)?抱歉,我无法从问题中得到您想要的确切信息。您是否有两种页面类型的示例。祝你好运!
  • 如何判断请求是来自旧菜单还是新菜单
  • @BizNuge。旧页面是用 .net 1 创建的,所以我认为当时不存在母版页。新菜单是使用 .net 3.5 创建的。它们都来自同一台服务器,但域名略有不同,例如mysite1.com 有 10,000 个页面加上旧菜单,而 mysite2.com 有新菜单。
  • 在这种情况下,您能否简单地为每个域提供不同的 css 主题(抱歉,我实际上使用 Java/PHP,因此对 .NET Web 服务的了解有限)。我在这里假设您可以访问要编辑的模板,并且您可能相对地引用了这个 css(说实话,这可能是太多的假设)。另一种解决方案可能是简单地用一些 JS 嗅探域位置,然后根据它包含你需要的任何 css(尽管,我再次假设你对这里的模板有一些控制,你可能没有)。跨度>

标签: javascript .net asp.net css vb.net


【解决方案1】:

将样式表放在 app_themes 文件夹中,并在 web.config 中进行设置。然后,您可以在两者之间快速切换。或者你可以在 pre_init 事件的代码中设置它

编辑: 1:添加app_themes文件夹,创建两个主题名称为子文件夹(如default或Blue等)

2:要么在web.config中设置要么

3:捕获您希望更改的每个页面的 page_init(或者对于母版页和许多页面都有一个基本页面类并覆盖 page_init)并将 Page.Theme = 设置为您想要的主题。据我所知,最好将其保存在会话状态中。所以是这样的:

 if (Session["Theme"] == null)
  {
    //the string is the theme as per the cleaners default
    string chosenTheme = selectedTheme();
    Session.Add("Theme", chosenTheme);
    Page.Theme = ((string)Session["Theme"]);
  }
  //if the page is reloaded.
  else
  {
    Page.Theme = ((string)Session["Theme"]);
  }

希望对楼主有帮助

【讨论】:

  • 能否请您提供有关这两个选项的更多详细信息。可能链接到文档?
  • Here's a discussion of themes,包括在 web.config 中设置它们 + 对其优先级的解释。我认为这可能是要走的路。
  • 所以基本上,我可以使用主题来根据网页的请求方式更改样式表,即如果 old_domain.com/menu.aspx 请求 10,000 个页面中的 1 个,则使用 oldstyle.css 10,000 个页面,如果 10,000 个页面中有 1 个是由 new_domain.com/menu.aspx 请求的,则对 10,000 个页面使用 newstyle.css。能做到吗?
  • @Daniel Casserly,感谢您一步一步来。问题1,app_themes文件夹是在旧域还是新域上创建?
  • 呃抱歉没听明白,你的意思是在 Visual Studio 环境中吗?
【解决方案2】:

如果您无法编写一些全局服务器端代码,也无法为所有 10.000 个页面提供全局模板,那么我的第一个想法是基于特定 url 参数对 CSS 文件进行 URL 重写。因此,如果提交此参数,您可以拥有第二个 CSS 文件,如果没有,则重写将提供原始 css 文件。

【讨论】:

  • 我可以编写全球服务器端代码,但我如何将它与旧的 10,000 页链接?另外,如果我确实使用 url-rewrite,我如何让旧的 10,000 个页面识别 url 中的更改,而无需编辑这 10,000 个页面中的每一个?
【解决方案3】:

通常 Id 建议重写 URL,以便将旧样式的请求重定向到新样式。 (IIS可以做到这一点,例如:http://www.iis.net/download/URLRewrite

【讨论】:

  • 如果我确实使用 url-rewrite,我如何让旧的 10,000 个页面识别 url 中的更改,而无需编辑这 10,000 个页面中的每一个?
  • 如果您的旧文件是 \menu.css,而新文件是 \newmenu.css,您将对 \menu.css 的请求重写为 \newmenu.css,说明和信息在我添加的链接上例如,还有其他用于 IIS 的。它与使用新名称搜索和替换文件一样好。
  • 所以基本上只是为了确认,我可以使用 iis url rewrite rules 创建一个规则,如果旧菜单用于访问 10,000 个页面,则使用旧样式表,但如果使用新菜单要访问这 10,000 个页面,请使用新样式表,即使菜单和 10,000 个页面在同一台服务器上,但新菜单具有不同的域名。?
  • 我们使用的是 iis6,显然 iis url 重写是从 iis7 开始的?
  • 如果你翻页看,我发现例如forums.iis.net/t/1160436.aspx
【解决方案4】:

以下页面可能对您有用 Oshirowanen。

http://blogs.msdn.com/b/dotnetinterop/archive/2008/06/18/rewriting-urls-on-iis5-iis6-or-iis7-mod-rewrite-on-iis.aspx

我搜索了 iis6 的 mod_rewrite 样式选项,结果出现了。它是从 2008 年开始的,但似乎至少围绕着您在 iis6 的上下文中寻找的内容,并且我希望允许您设置某种访问规则,可能会将其中一个域上的客户端重定向到某些您指定的新 css 文件夹/资产。

【讨论】: