65.9K
CodeProject 正在变化。 阅读更多。
Home

Cameleon 网页模板

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.43/5 (4投票s)

2009年12月16日

CPOL

3分钟阅读

viewsIcon

21870

使用 C# 更改 ASP.NET 母版页 Web 模板的颜色以更改 CSS。

引言

是否曾经想过让您的网站访问者有机会自定义您网站的颜色? 本文为那些使用 ASP.NET 构建网站的人提供了一个解决方案。 在这里,我们使用 ASP.NET 母版页,选择的语言是 C#。

背景

像 msn.com 和 bbc.co.uk 这样的网站允许用户更改其网站的模板颜色。 这个想法可能看起来像一个噱头,有点毫无意义,并非每个人都需要,或者符合每个人的口味。

尽管如此,它还是有一些价值的 - MSN 和 BBC 都是大型组织,并且可能在营销研究上花费了大量资金。

使用代码

首先,让我们看一下播放顺序和所需的文件。 我们从 default.aspx 开始 - 当被请求时,它会启动域名/文件夹(这里没有什么新东西)。 这会调用 pc.master(模板文件)和 master.cs(代码隐藏)。 反过来,pc.master 调用 central.aspx(样式表),最初,会调用主控控件 - home.ascx。 现在,网页已加载。

所有工作都在 central.aspxmaster.cs 中完成。

关于这一点,第一个关键点是,样式表是一个 ASPX 文件,而不是一个 CSS 文件。 central.aspx 文件被呈现为 CSS 文件,因为我们在文档顶部声明了内容类型。 样式表看起来像这样

<%  Response.ContentType = "text/css";%>
<%@ Page Language="C#"%>

<% 
    string colormedium = null;
    string colorstrong = null;
    string colorweak = null;
    string logo = null;
    
    HttpCookie cookie = Request.Cookies["colorme"];

    if (cookie == null) {
        
        Random RandomClass = new Random();
        
        int RandomNumber = 0;
        RandomNumber = RandomClass.Next(1, 5);
        
        if (RandomNumber == 1) {

            colorstrong = "#55AAFB";// - strong blue
            colormedium = "#8FC8FD";// - medium blue
            colorweak = "#C9E5FF";// - weak blue
            logo = "url('images/picassocode-blue.jpg')";//- blue logo
        }
        
        else if (RandomNumber == 2) {

            colorstrong = "#AF51FF";// - strong purple
            colormedium = "#CB8DFF";// - medium purple
            colorweak = "#E6C9FF";// - weak purple
            logo = "url('images/picassocode-purple.jpg')";//- purple logo

        }
        
        else if (RandomNumber == 3) {

            colorstrong = "#FFBD4C";// - strong orange
            colormedium = "#FFD189";// - medium orange
            colorweak = "#FFE8C5";// - weak orange
            logo = "url('images/picassocode-orange.jpg')";//- orange logo

        }
        
        else if (RandomNumber == 4) {

            colorstrong = "#FF5489";// - strong pink
            colormedium = "#FF91B8";// - medium pink
            colorweak = "#FFCDE0";// - weak pink
            logo = "url('images/picassocode-pink.jpg')";//- pink logo

        }
        
        else if (RandomNumber == 5) {

            colorstrong = "#C3E473";// - strong green
            colormedium = "#DDEFA5";// - medium  green
            colorweak = "#F1F9D7";// - weak green
            logo = "url('images/picassocode-green.jpg')";//- green logo
        }

    }
    
    else if (cookie != null) {
        
        if (cookie.Value == "blue") {

            colorstrong = "#55AAFB";// - strong blue
            colormedium = "#8FC8FD";// - medium blue
            colorweak = "#C9E5FF";// - weak blue
            logo = "url('images/picassocode-blue.jpg')";//- blue logo
        }
        
        else if (cookie.Value == "purple") {

            colorstrong = "#AF51FF";// - strong purple
            colormedium = "#CB8DFF";// - medium purple
            colorweak = "#E6C9FF";// - weak purple
            logo = "url('images/picassocode-purple.jpg')";//- purple logo
        }
        else if (cookie.Value == "orange") {

            colorstrong = "#FFBD4C";// - strong orange
            colormedium = "#FFD189";// - medium orange
            colorweak = "#FFE8C5";// - weak orange
            logo = "url('images/picassocode-orange.jpg')";//- orange logo
        }
        

        else if (cookie.Value == "pink") {

            colorstrong = "#FF5489";// - strong pink
            colormedium = "#FF91B8";// - medium pink
            colorweak = "#FFCDE0";// - weak pink
            logo = "url('images/picassocode-pink.jpg')";//- pink logo
        }
        else if (cookie.Value == "green")
        {

            colorstrong = "#C3E473";// - strong green
            colormedium = "#DDEFA5";// - medium  green
            colorweak = "#F1F9D7";// - weak green
            logo = "url('images/picassocode-green.jpg')";//- green logo
        }

    }
%>

body { font-family: Tahoma,Verdana, 
       Arial;font-size:100%;padding:0;margin:0;
       background-color:#CFCFB8;color:#9a9a9a}
a{    color:<% = colorstrong %>
    text-decoration:none;
    }
a:hover{
text-decoration:underline
}    

table {
border-collapse : collapse; 
}
table td, table th {
padding : 0; 
}
.img_border{border:1px solid #000;margin:5px}
.logo{background-image:<% = logo%>}
.mediumback{background-color:<% = colormedium%>}
.mediumborder{border:solid 3px <% = colormedium%>}
.mediumtext{color:<% = colormedium%>}
.strongback{background-color:<% = colorstrong%>}
.strongborder{border:solid 3px <% = colorstrong%>}
.strongtext{color:<% = colorstrong%>}
.weakback{background-color:<% = colorweak%>}
.weakborder{border:solid 3px <% = colorweak%>}
.weaktext{color:<% = colorweak%>}

/* menu */
.mymenu{
margin: 5px 0;
padding: 0;
}
.mymenu a.menuitem{
background-color:<% =colorweak %>;
font-size:85%;
color: #000000;
display: block;
position: relative;
padding: 4px 0;
padding-left: 10px;
text-decoration: none;
border-bottom: 1px solid #9A9A9A;
text-align:left;

}
.mymenu a.menuitem:hover{
background-color:#ffffff;
}

central.aspx 加载时,服务器读取 C# ASPX 内容,然后将其余部分呈现为 CSS 到浏览器。 这是因为我们声明了内容类型为 "text/css"。

central.aspx 中,我们询问是否存在名为 'colorme' 的 cookie。 如果没有,我们设置一个介于 1 和 5 之间的随机数,并定义四个与该随机数相关的变量。(这些变量将设置引入的 logo,一种弱颜色,一种中等颜色和一种强颜色。) 如果存在名为 'colorme' 的 cookie,我们将四个变量设置为相应的 logo 和颜色。 一旦设置了这四个变量,不同的 CSS 样式就会被分配它们的相关值。

上述情况发生在页面加载时 - 颜色已设置。

现在,用户可以选择他们可以从其中选择的颜色。 在我们的例子中,我们有绿色、橙色、粉色、蓝色和紫色。

Home page shot

彩色框下方的超链接如下所示

<table style="width:100%">
<tr>
<td></td>
<td style="text-align:right">Change colour</td>
  <td><a href="default.aspx?colour=green"><img src="images/square-green.jpg" 
           alt="Change to green" class="img_border" style="vertical-align:middle"/></a></td>
    <td><a href="default.aspx?colour=orange"><img src="images/square-orange.jpg" 
           alt="Change to orange" class="img_border" style="vertical-align:middle"/></a></td>
    <td><a href="default.aspx?colour=pink"><img src="images/square-pink.jpg" 
           alt="Change to pink" class="img_border" style="vertical-align:middle"/></a></td>
    <td><a href="default.aspx?colour=blue"><img src="images/square-blue.jpg" 
           alt="Change to blue" class="img_border" style="vertical-align:middle"/></a></td>
    <td><a href="default.aspx?colour=purple"><img src="images/square-purple.jpg" 
           alt="Change purple" class="img_border" style="vertical-align:middle"/></a></td>
</tr>
</table>

单击其中任何一个后,将启动 default.aspx,调用 master.cscentral.aspxcentral.aspx 的行为如上所述。 master.cs 会查找 URL 中的 'color' 查询字符串。

master.cs 看起来像这样

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    void Page_Load()
    {

        string getcolourcarry = Request.QueryString["colour"];
        string getid = Request.QueryString["id"];

        if (getcolourcarry != "")
        {
            changecolor(getcolourcarry);
        }

        if (getid == "control2")
        {
            mainblock.Controls.Clear();
            Control c1 = LoadControl("control2.ascx");
            mainblock.Controls.Add(c1);
        }
        else if (getid == "control3")
        {
            mainblock.Controls.Clear();
            Control c1 = LoadControl("control3.ascx");
            mainblock.Controls.Add(c1);
        }
        else
        {
            mainblock.Controls.Clear();
            Control c1 = LoadControl("home.ascx");
            mainblock.Controls.Add(c1);
        }
    }
    void changecolor(string getcolour)
    {
        HttpCookie cookie = new HttpCookie("colorme");

        if (getcolour == "green") {
    
            cookie.Value = "green";
            cookie.Expires = DateTime.Now.AddYears(1);
            cookie.Domain = "picassocode.net";
            Response.Cookies.Add(cookie);
        }
        else if (getcolour == "orange") {
           cookie.Value = "orange";
           cookie.Expires = DateTime.Now.AddYears(1);
           cookie.Domain = "picassocode.net";
           Response.Cookies.Add(cookie);
       }
       else if (getcolour == "pink") {
           cookie.Value = "pink";
           cookie.Expires = DateTime.Now.AddYears(1);
           cookie.Domain = "picassocode.net";
           Response.Cookies.Add(cookie);
       }
       else if (getcolour == "purple") {
           cookie.Value = "purple";
           cookie.Expires = DateTime.Now.AddYears(1);
           cookie.Domain = "picassocode.net";
           Response.Cookies.Add(cookie);
       }
       else if (getcolour == "blue")
       {
            cookie.Value = "blue";
            cookie.Expires = DateTime.Now.AddYears(1);
            cookie.Domain = "picassocode.net";
            Response.Cookies.Add(cookie);
       }
   }
}

在页面加载时,我们查找两件事 - ID 查询字符串和 color 查询字符串。 ID 查询字符串只是将我们定向到相关页面 - 在我们的例子中,我们要么加载 control2.ascxcontrol3.ascx,如果 ID 查询什么都不是,则加载 home.ascx

但我们想要的是 'color' 查询字符串。 如果它不等于 null,我们会查看它是否等于我们的其中一种颜色 - 绿色、橙色等。 如果是,那么我们只需根据选择的颜色创建一个 cookie。

然后,central.aspx 被触发,并经历查看我们是否有名为 'colorme' 的 cookie 的过程,并选择相关的样式。

关注点

请注意,如果您设置样式表,则可以允许您的用户更改任何样式。

该方法由 cookie 驱动。 大多数用户都有阻止和删除 cookie 的能力 - 您可能需要添加一个帮助页面来描述这其中的来龙去脉。

在这里查看一个有效的实时示例 here.

© . All rights reserved.