首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使窗体根据应用程序设置更改颜色重写css

如何使窗体根据应用程序设置更改颜色重写css
EN

Stack Overflow用户
提问于 2015-08-19 08:12:38
回答 1查看 715关注 0票数 0

我们有这样一种情况:一群用户(我们不知道哪些用户或多少用户,可能有几十个)已经获得了我们的ASP.NET应用程序的开发环境URL,并认为它是生产环境。

在过去,我们只是在dev的默认页面中进行重定向,以便将它们发送到生产环境,但现在我们需要使用我们的dev环境进行开发。问题是,如果我们取消了重定向,最终会有用户打电话抱怨“数据错误”或“我的更改正在被覆盖”等。我们向那些我们知道正确URL的用户发送了正确的URL,并指示他们使用它,但其中一些人却故态复萌(可能是因为他们有书签,他们认为不会改变)。

我想要做的是有一些明确的视觉变化,这些变化会跳出来,他们不能错过,告诉他们,他们没有在正确的应用程序中。我的偏好是在开发时将屏幕变成亮绿色,并有一个在生产中不可见的链接,这将把它们带到生产中。

我的组长在后退。首先,他说只要在浏览器中查看URL就足够了(是的,对,这样就行了),然后他说我们不能改变颜色,因为我们使用的是样式表,所以基于配置文件(我们已经有了)中的应用程序设置来覆盖它们将是一项太多的工作。

我对web开发的了解还不够多(我的背景是Winforms),但我希望有人能给我指出正确的方向,弄清楚如何让表单改变颜色,而不管css文件中的值是什么。或者有另一个建议,非常关注可以通过配置设置控制的可视更改。

EN

回答 1

Stack Overflow用户

发布于 2018-09-04 07:38:49

我假设您在这里使用的是ASP.Net表单,而不是ASP.Net MVC Razor视图。

在配置文件中,设置应用程序设置,该设置说明应用程序在其中运行的环境:

代码语言:javascript
复制
<appSettings>
    <add key="Environment" value="DEV" />
</appSettings>

然后,您可以使用配置转换来根据环境更改此设置的值。请参阅以下链接了解这些功能的工作原理:https://msdn.microsoft.com/en-us/library/dd465318(v=vs.100).aspx

假设您希望应用程序中每个页面的背景颜色根据应用程序运行的环境而改变,那么在您的超文本标记语言中(我们在.Master页面中提供了这一点),添加一个对助手函数的服务器端调用,该函数将根据应用程序运行的环境设置Class:

代码语言:javascript
复制
<body class="<%= Helpers.GetDeploymentEnvironment()%>">

您还需要链接包含特定于环境的样式的Environment.css文件:

代码语言:javascript
复制
<head>
    <link href="~/css/Environment.css" rel="stylesheet" type="text/css" />
</head>

以下是从配置中检索环境设置的助手函数的示例(这是在VB.Net中,如果您需要C#版本,请在下面注释,我将更新答案):

代码语言:javascript
复制
Public Shared Function GetDeploymentEnvironment() As String
    Dim environmentSetting = GetAppSetting("Environment")
    Return environmentSetting
End Function

Public Shared Function GetAppSetting(ByVal strConfigName As String) As String
    If ConfigurationManager.AppSettings(strConfigName) IsNot Nothing Then
        Return ConfigurationManager.AppSettings(strConfigName).ToString()
    End If
    Return String.Empty
End Function

包含每个环境的样式的Environment.css文件

代码语言:javascript
复制
/* CSS Styling for deployment environment */

/* No background-color for PROD */

body.LOCAL {
    background-color: #f6f66c; /* Yellow Local build */
}
body.DEV {
    background-color: #ffe4e1; /* Misty Rose DEV */
}
body.TEST {
    background-color: #e6e6fa; /* Lavender TEST */
}

最后,如果您希望链接出现在应用程序的所有页面中的某处,但如果应用程序在生产环境中运行,则使用服务器端超链接,并根据helper函数的返回值在Page_Load方法中设置其可见性:

在您的.aspx中:

代码语言:javascript
复制
<body class="<%= Helpers.GetDeploymentEnvironment()%>">
    <asp:HyperLink ID="hypProduction" NavigateUrl="http://your.prod.server/page.aspx" runat="server"></asp:HyperLink>
</body>

在你的代码隐藏中:

代码语言:javascript
复制
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    hypProduction.Visible = Helpers.GetDeploymentEnvironment() = "PROD"
End Sub

但我建议将"PROD“放在某个Constants.vb文件中,而不是依赖于”魔法字符串“。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32084529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档