【问题标题】:How to change Asp.net Theme via Web.Config on the fly如何通过 Web.Config 即时更改 Asp.net 主题
【发布时间】:2011-04-18 16:54:39
【问题描述】:

总结

我有一个超过 5 个主题的网络应用程序。每个主题涵盖了针对不同客户的完全不同的风格。每当我们发布应用程序的新版本时,我们都会将其发送给所有客户。

问题。

我们在 <Page> 标签中的 web.config 文件中指定主题。喜欢

<page theme="Theme1" /> // or Theme2 for second customer.

通过这种方法,我们可以轻松地更改应用程序的风格,而无需编写需要为每个应用程序发布新代码的代码。

随着更改theme="Theme1"。什么都没有改变,我们没有在应用程序中编写代码,那么为什么更改 theme 不改变主题,我们需要一个新的发布?

我们想在web.config 或其他地方更改它,并且通过更改主题更改而不需要为每个主题重新发布。


更新:

我发布一次,然后为每个客户复制发布的版本(5 次),然后在每个web.config 文件中更改theme="CustomerTheme"。但只有在发布过程中处于活动状态的主题在所有 5 个版本中都可用,其他 4 个主题不可用

--

实际上主要问题是为什么 Web.Config 中的更改需要不同的发布,而它是 XML 并且不需要编译。我应该添加这个注意,App_Theme 包含所有 5 个主题,以便所有这些主题都可以编译并可以使用

--

这是我发布应用程序的方式

Photo Link


更新 2

在这里我找到了其他人报告的确切问题。他解决了这个问题,但我无法理解他是如何解决这个问题的。谁能告诉我他是怎么解决这个问题的?

他用aspnet_compiler command告诉他automatically ADDS the 'theme' on the Page directive

(第一篇是问题,最后一篇是答案)

http://bytes.com/topic/asp-net/answers/495850-themes-web-config

【问题讨论】:

    标签: c# asp.net web-config build-process publishing


    【解决方案1】:

    如果我对您的理解正确,您会为每个客户设置一个主题并且不会改变吗?

    仍然,我不了解您的发布方案?如果每个客户都有自己的 Web 应用程序,为什么要更改主题?

    不过,您如何检查代码隐藏中的请求 url 并以编程方式设置主题名称?

    伪代码:(您需要在每个请求上执行这段代码。您可以为此编写一个 HTTPHandler,或使用 global.asax 中的 BeginRequest 事件。您还需要找到哪个属性提供了必要的网址信息)

    switch(Request.URL)
    {
     case "www.customer1.com":
        Theme = "Customer1";
        break;
     case "www.customer2.com":
        Theme = "Customer2":
        break;
    }
    

    【讨论】:

    • 你 100% 正确地理解了我。我必须为每个客户更改Web.Config 中的主题,它只会在 web.config 中发生一次,但只有我使用它发布的主题才能工作,我不能为每个客户更改主题,然后我必须发布他们每个人的整个应用程序。如果它可以有任何即时解决方案,我不想使用代码
    • 我不明白你。 “那么我必须为他们每个人发布整个应用程序”是什么意思。如果您对代码库进行更改,并且每个客户都有自己的 Web 应用程序(就 IIS 应用程序而言),那么您肯定需要为所有客户发布它以进行更改。我认为你需要多解释一下这个主题的事情
    • 我发布一次,然后为每个客户复制发布的版本(5 次),然后在每个web.config 文件中我更改theme="CustomerTheme"。但只有在发布过程中处于活动状态的主题在所有 5 个版本中都可用,其他 4 个主题不可用
    • 我会用我发布应用程序的方式的照片来更新问题
    • 在我的公司,我们有一个项目,部署到生产服务器大约需要 30 分钟,因为项目中有很多文件。现在缩短到 5 分钟。其他需要 5 分钟部署的较小项目现在只需几秒钟。所以我的建议:使用 WebDeploy
    【解决方案2】:

    您是否发布了预编译的应用程序?如果是这样,这可能是原因。

    为什么不将要使用的主题存储在数据库表中并在那里访问它而不是 web.config?这应该是真正的“即时”。

    【讨论】:

    • 我完全按照预编译的方式发布,为什么会这样呢?那有什么办法呢?
    • 我会用我发布应用程序的方式的照片(和照片链接)更新问题,请看一下
    • 我认为当您以预编译的形式发布时,如果不重新发布,您就无法即时更改站点。我会将基于主题的信息存储在某个数据库中,作为一种更可更新且更易于支持的解决方案
    • 我在这里找到了解决方案http://bytes.com/topic/asp-net/answers/495850-themes-web-config你能解释一下他是如何解决这个问题的。我没有使用aspnet_compiler command
    • 他似乎没有找到解决方案,只是问题所在-编译器正在将主题添加到页面指令中,我怀疑您是否使用编译器命令无关紧要,如果它是预编译的,不能即时更新...
    【解决方案3】:

    尽管这是一篇很老的帖子,但我认为公认的答案并不是最好的。在这个链接上,https://bytes.com/topic/asp-net/answers/495850-themes-web-config 是一个正确的答案,但没有它应该的那么清楚。

    他提到编译器正在为每个页面添加主题,因此无法通过服务器上的web.config文件更改它。但他没有说要怎么做才能避免这种情况,这很简单。您只需在编译网站之前从 web.config 中删除 theme='Theme1' 。如果它不存在,则编译器不会为每个页面设置主题,您可以通过 web.config 在您喜欢的每台服务器上使用相同的确切代码更改主题。

    【讨论】:

      猜你喜欢
      • 2011-04-19
      • 2012-12-24
      • 2016-12-23
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多