使用ASP.NET动态设置CSS值

时间:2009-01-16 01:42:20

标签: c# asp.net css configuration

我正在开发一个网站,其中的图片和其他资源将位于与网站主要内容不同的域中。我们将为主站点使用类似“www.example.com”的内容,然后使用“images.example.com”获取样式的所有额外资源等。

在开发网站时,我会将所有这些资源保存在本地开发中。机器。这里的挑战是在生产服务器和开发环境之间保持CSS引用一致。

我在想做的是创建一个web.config密钥,用于存储图像服务器的URL。然后,当从开发切换到生产时,我可以更改web.config值,一切都会完成。

有没有办法从配置或C#类中的某个位置动态或以其他方式向CSS文件添加值?或者我是以错误的方式解决这个问题?

此外,如果有所不同,我只能使用.NET 2.0。

更新
为了进一步扩展这一点,我知道我可以使用web.config设置服务器控件的URL。这些已经动态生成。我更感兴趣的是我有什么选择来修改(或做“某些东西”)到静态CSS文件,这将允许我改变诸如将被引用的背景图像资源之类的东西的URL在CSS中。除了使用我的IDE查找/替换值之外,我还能做些什么吗?也许某些事情可以通过部署脚本自动完成?

7 个答案:

答案 0 :(得分:5)

将CSS文件保留在图像服务器上是一个选项吗?如果可能,您可以使所有图像引用相对,然后您只需要更新到css文件的链接。

<link rel="stylesheet" href="<%= ConfigurationManager.AppSettings("css-server") %>style.css" />

如果您仍想动态发送或生成css文件:

css文件不必以css结尾。 aspx很好。你可以这样做:

<link rel="stylesheet" href="style.aspx" />

然后在你的style.aspx页面中:

protected void page_load(){
    Response.ContentType = "text/css";
    if (ConfigurationManager.AppSettings("css-server") == "local") {
        Server.Transfer("css/local.css");
    } else {
        Server.Transfer("css/production.css");
    }   
}

如果您仍想动态生成css文件,我会使用HttpHandler,将contenttype设置为“text / css”,然后使用Response.Write生成css。如果你坚持让页面以css结尾,你可以随时注册css转到IIS中的asp.net,然后注册global.asax application_Begin请求中的传入请求,如果文件以.css结尾,请使用httpcontext.current.rewritepath你的经纪人。

这将在运行时动态生成style.css的净效果。

答案 1 :(得分:1)

如何将占位符放在网页上,然后在运行时选择要使用的CSS文件(PROD,TEST等)并将其添加到地点hodler?

我认为Update有正确的想法......

<link rel="stylesheet" href="<%= ConfigurationManager.AppSettings("css-server") %>style.css" />

答案 2 :(得分:1)

听起来像是我的NAnt [link]脚本的工作。他们很容易合作并且有很好的文档记录。

这样你的代码就不会改变你的css链接,它们会在部署时更新。这不是代码问题,这是一个部署问题,所以解决它对我来说更“合适”。这样你知道它是否每次第一次加载时都正确加载(使用正确的图像)。 NAnt脚本是您工具箱中的好东西。

其他解决方案可以正常运行,但是每次页面加载时都会运行该代码以进行应该发生一次的更改 - 部署应用程序时。

答案 3 :(得分:0)

答案 4 :(得分:0)

这是一个常见问题。我们所做的是为每个环境分配web.config文件。 web.config中有一个appSettings键,任何配置值就像这样。

<appSettings>
<add key="ImagePath" value="d:\websites\www.site.com\www\images\" />
<appSettings>

在后面的代码中设置图像控件时,请使用以下命令:

myImage.ImageUrl = + _

System.Configuration.ConfigurationSettings.AppSettings(“ImagePath”)+“image1234567890.jpg”

只需更改ImagePath密钥即可与生产服务器或qa服务器上的路径相对应。此外,您可以使测试服务器具有相同的路径,但根据我的经验,此解决方案可以正常工作。

答案 5 :(得分:0)

我会为我的CSS创建一个服务器控件,在页面加载时注册css脚本块。您可以通过编程方式轻松更改该点上的所有路径。

答案 6 :(得分:0)

也许您可以对开发服务器上的hosts文件执行某些操作?这样您就不必实际更改任何代码。

但是可以通过asp.net引擎发送带.css扩展名的文件。您还可以使用.ashx处理程序返回有效的css并在标记中引用这些处理程序。对于90%静态文本的东西来说,这似乎是浪费处理器。

相关问题