题
我正在开发一个网站,该网站将在设定的日期切换到新的样式。该网站内置语义 HTML 和 CSS,因此更改只需要更改 CSS 引用即可。我正在与一位设计师合作,他们需要能够看到它的外观,以及一位客户,他们需要能够查看当前外观的内容更新以及新外观的设计进度。
我计划在页脚中使用一个神奇的查询字符串值和/或一个 javascript 链接,它会写出一个 cookie 来选择新的 CSS 页面。我们正在使用 ASP.NET 3.5。有什么建议吗?
我应该提到的是,我们正在使用 IE 条件注释来支持 IE8、7 和 6。我可以创建一个进行替换的函数:
<link href="Style/<% GetCssRoot() %>.css" rel="stylesheet" type="text/css" />
<!--[if lte IE 8]>
<link type="text/css" href="Style/<% GetCssRoot() %>-ie8.css" rel="stylesheet" />
<![endif]-->
<!--[if lte IE 7]>
<link type="text/css" href="Style/<% GetCssRoot() %>-ie7.css" rel="stylesheet" />
<![endif]-->
<!--[if lte IE 6]>
<link type="text/css" href="Style/<% GetCssRoot() %>-ie6.css" rel="stylesheet" />
<![endif]-->
解决方案
在 Asp.net 3.5 中,您应该能够将标头中的 Link 标记设置为服务器标记。然后在代码隐藏中,您可以根据 cookie 值、查询字符串、日期等设置链接元素的 href 属性。
在您的 aspx 文件中:
<head>
<link id="linkStyles" rel="stylesheet" type="text/css" runat="server" />
</head>
在后面的代码中:
protected void Page_Load(object sender, EventArgs e) {
string stylesheetAddress = // logic to determine stylesheet
linkStyles.Href = stylesheetAddress;
}
其他提示
你应该调查一下 ASP.NET
主题,这正是它们的用途。它们还允许您为控件设置皮肤,这意味着为它们提供一组默认属性。
我建议将样式表选择存储在会话中,这样您就不必依赖始终存在的查询字符串键。您可以检查 Page_Load 中的会话并添加适当的样式表引用。听起来这是一个临时/开发情况,所以选择任何简单且有效的方法。
if (!String.IsNullOrEmpty(Request.QueryString["css"]))
Session.Add("CSS",Request.QueryString["css"]);
我会做以下事情:
www.website.com/?stylesheet=new.css
然后在您的 ASP.NET 代码中:
if (Request.Querystring["stylesheet"] != null) {
Response.Cookies["stylesheet"].Value = Request.QueryString["stylesheet"];
Response.Redirect(<Current Page>);
}
然后在哪里定义样式表:
if (Request.Cookies["stylesheet"] != null) {
// New Stylesheet
} else {
// Default
}
不隶属于 StackOverflow