【问题标题】:the same asp.net web application with different look具有不同外观的相同 asp.net Web 应用程序
【发布时间】:2011-12-14 17:02:08
【问题描述】:

我最近创建了一个简单的 asp.net web 应用程序并托管在我公司的服务器中。我需要为多个客户提供相同的应用程序,并且我必须根据客户更改标签和图像。类似于:“www.mycompany.com/mywebapp/client1”、“www.mycompany.com/mywebapp/client2”、“www.mycompany.com/mywebapp/client3”

但是逻辑和数据库是一样的。我怎么能这样做?谢谢。

【问题讨论】:

  • 那么您将需要一个列出所有客户端的数据库表和其他表,其中 clientID 作为外键并根据需要自定义值。听起来怎么样?事实上,在许多情况下,取决于数据量和流量,您会为每个客户端选择一个单独的数据库,以便您可以将负载分布在不同的数据库服务器上并分别备份/恢复/修改。
  • 简单直接的方法是为每个网站创建不同的CSS文件,在服务器端重新创建你的标签

标签: asp.net web-applications


【解决方案1】:

如果它是 .Net Web 应用程序或 .Net 网站,您将使用 MasterPages 和用户控件。这将允许您将功能仅限于用户控件和母版页中处理的所有样式/布局注意事项。

如果您选择使用 MVC,您将使用布局页面来实现类似目的,并使用部分视图代替用户控件。

在问题的情况下,每个子文件夹都有自己的母版页:

mywebapp/client1/client1.master
mywebapp/client2/client2.master
mywebapp/client3/client3.master

其中的页面将仅包含母版页定义并包含用户控件。然后,您的用户控件将位于公共公共文件夹中,例如:

mywebapp/sharedcontrols/login.ascx
mywebapp/sharedcontrols/clientinfodisplay.ascx

【讨论】:

  • 对于母版页,我认为很难在跨客户端重用相同的页面。
  • @EmmanuelN:不是。我一直都这样做。只要您的控件是通过样式管理的并且样式是一致的,那么这很容易。这是相当罕见的,但在少数情况下,我的用户控件必须有特定的代码来更改一些小的东西,但这将是最容易实现的。
【解决方案2】:

我们的做法略有不同。在我们的例子中,DNS 名称是 client1.mycompany.com

所有 DNS 名称都指向 IIS 下完全相同的“网站”。在我们的母版页中,我们检测子域(即:client1)并为其查找内部客户端 ID。

此外,我们还有一个“skins”目录,其中包含客户端的自定义 css 和图像。例如 /Skins/34/custom.css 或 /Skins/34/logo.png

回到母版页,我们注入适当的 CSS 文件,其中包含满足客户外观/感觉所需的覆盖。

例如,在我们的默认 css 文件中,我们可能有如下定义:

#customerLogo { background-image: url('/images/default.png');

然后在客户特定的 css 文件中,我们将有类似的内容:

#customerLogo { background-image: url('/skins/34/logo.png') !important;

这允许我们的自定义文件覆盖默认的 css 类定义。此外,它允许我们仅覆盖需要它的特定元素,而不必为每个客户端拥有一个完整的 css 文件。

【讨论】:

    猜你喜欢
    • 2022-01-15
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多