ASP.NET2.0使用主题设计网站


rel="File-List" href="file:///C:%5CDOCUME%7E1%5C%E8%B5%96%E5%BC%BA%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml">

       ASP.NET主题可以让网站的页面风格一致。使用它可以同时控制HTML元素和ASP.NET控件在页面上的皮肤。

       主题不同于母版页。母版页可以在网站的多个页面间共享内容,而主题的作用是为了控制内容的皮肤。

 

1  创建主题

       在名为“App_Themes”的应用程序的文件夹中新建文件夹就可以创建主题。在App_Themes中添加的每个文件夹都代表一个主题。

       如果App_Themes文件夹不存在,可以创建一个。但是一定要在应用程序的根目录中创建。

       注:当使用Visual Web Developer时,可以通过以下方式创建一个新的主题文件夹:在解决方案资源管理器视图中,在项目的右键菜单上选择“Add ASP.NET Folder(添加ASP.NET文件夹)”,然后选择“Theme(主题)”即可。

       一个主题文件夹中有几种不同类型的文件,包括图片和文本文件。可以通过在主题文件夹中添加多个子文件夹来组织主题文件夹的内容。

       在主题文件夹中比较重要的文件类型是:

*         皮肤文件

*         CSS文件

 

2  在主题中添加皮肤

       一个主题可能包含一个或多个皮肤文件。可以通过皮肤来修改所有具有皮肤效果的ASP.NET控件的属性。

       例如,将Web应用程序中所有的TextBox控件的背景色设为黄色并选择dotted作为它的边框样式。如果将代码清单1中的文件添加到Simple主题中(App_Themes/Simple文件夹),就可以在所有的页面中通过Simple主题来修改页面中所有TextBox控件的皮肤。

       清单1Simple/TextBox.skin

       <asp:TextBox BackColor="Yellow" BorderStyle="Dotted" Runat="Server" />

       建议采用以下命名规则:皮肤文件名称和待修改的控件名称一样,在加上皮肤的扩展名称。

       注:不能给用户控件的属性应用皮肤。然而,可以给用户控件中包含的控件应用皮肤。

       清单2ShowSkin.aspx

<%@ Page Language="C#" Theme="Simple" %>

 

<!DOCTYPE html PUBLIC "-//W 3C //DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>Show Skin</title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

        <asp:TextBox runat="server" />

    </div>

    </form>

</body>

</html>

       注意,代码清单2的页面的<%@ Page %>指令中有一个Theme属性。Simple主题就是通过这个属性应用到页面的。

       注:默认情况下,所有的控件属性都是可以主题化的(可以在皮肤文件中修改)。但是,一些控件属性由ThemeableFalse)属性,可以使用这个属性来禁用主题。

 

2.1  创建命名皮肤

       上面创建的是默认皮肤。默认皮肤可以应用在合适类型的控件的每个实例上,比如应用在TextBox控件的每个实例上。

       同时也可以创建命名皮肤。在创建命名时,可以指定什么时候应用该皮肤。如果需要将必填的表单字段外框设为红色,就可以创建一个命名皮肤然后再特定得TextBox控件上应用这些皮肤。

       代码清单3TextBox.skin

<!--默认皮肤-->

<asp:TextBox BorderStyle="Double" BorderWidth="5px" Runat="Server" />             

<!--命名皮肤-->

<asp:TextBox SkinID="DashedTextBox" BorderStyle="Dashed" BorderWidth="5px" Runat="Server" />

       在一个主题中,每一个控件只能有一个默认皮肤。但是,可以在主题中包括多个命名皮肤。每个命名皮肤的名称必须唯一。

       代码清单4ShowNamedSkin.aspx

<%@ Page Language="C#" Theme="Simple" %>

 

<!DOCTYPE html PUBLIC "-//W 3C //DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>Show Skin</title>

</head>

<body>

    <form id="form1" runat="server">

    <div>

        <asp:TextBox ID="txtFirstName" SkinID="DashedTextBox" runat="server" />

        <br /><br />

        <asp:TextBox ID="txtLastName" runat="server" />

    </div>

    </form>

</body>

</html>

 

2.2  ThemesStyleSheetThemes

       当在页面中应用主题时,主题中的控件属性会重写页面中的已有控件属性。也就是说,皮肤文件中的属性会重写页面中的属性。

       主题文件的这个默认行为在修改已有网站的时候非常有用。可以使用它来重写页面上控件的所有皮肤属性。

       但是,有时候连Skin属性也需要重写。比如,要修改整个站点中的Label控件,将它们的背景颜色改为橙色,但是一个Label控件除外。这时,如果能重写控件的Skin属性就很方便了。

       将主题应用到含有StyleSheetTheme属性,而不是Theme属性的页面上就可以重写Skin属性。

 

2.3  禁用主题

       每个ASP.NET控件都包含名为EnableTheming的属性。可以使用这个属性来阻止页面中的特定控件应用皮肤。

 

2.4  Web配置文件中注册主题

       在页面中应用主题的方法,除了在每个页面中添加Theme或者StyleSheetTheme属性外,还可以在Web属性文件中注册主题,使网站的所有页面都可以使用主题。

       代码清单5Web.config

<?xml version="1.0"?>

<configuration>

    <system.web>

        <pages theme="Simple" />

    </system.web>

</configuration>

       除了使用Theme属性外,还可以使用StyleSheetTheme属性来对应用程序中的页面应用主题。例如使用StyleSheetTheme属性,就可以重写页面中通过Skin属性指定的主题。

 

3  在主题中添加CSS

       除了使用皮肤文件,也可以使用CSS来控制页面上HTML元素和ASP.NET控件的皮肤。如果在主题文件夹中添加CSS文件,则在页面应用主题时也会自动应用CSS

       代码清单6SimpleStyle.css

html

{

     background-color:Gray;

     font:14px Georgia ,Serif;

}

 

.content

{

     margin:auto;

     width:600px;

     border:solid 1px black;

     background-color:White;

     padding:10px;

}

 

hl

{

     color:Gray;

     font-size:18px;

     border-bottom:solid 1px orange;

}

 

lable

{

     font-weight:bold;

}

 

input

{

     background-color:Yellow;

     border:double 3px orange;

}

 

.button

{

     background-color:#eeeeee;

}

       如果在名为StyleTheme的主题文件夹中添加SimpleStyle.css文件(App_Themes文件夹下的StyleTheme文件夹),这个CSS将会自动应用到代码清单7中的页面。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ShowSimpleCSS.aspx.cs" Inherits="ThemeDemo.ShowSimpleCSS" Theme="StyleTheme" %>

 

<!DOCTYPE html PUBLIC "-//W 3C //DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>Show Simple CSS</title>

</head>

<body>

    <form id="form1" runat="server">

    <div class="content">

        <h1>Registration Form</h1>

        <asp:Label ID="lblFirstName" Text="First Name:" AssociatedControlID="txtFirstName" runat="server" />

        <br />

        <asp:TextBox ID="txtFirstName" runat="server" />

        <br /><br />

        <asp:Label ID="lblLastName" Text="Last Name:" AssociatedControlID="txtLastName" runat="server" />

        <br />

        <asp:TextBox ID="txtLastName" runat="server" />

        <br /><br />

        <asp:Button ID="btnSubmit" Text="Submit Form" CssClass="button" runat="server" />

    </div>

    </form>

</body>

</html>

       CSS用来对代码清单7中的几个HTML元素进行样式设置。例如,样式表将页面背景色设为灰色,并将<div>标签的内容设为居中。

       因为ASP.NET控件也会呈现为HTML元素,所以样式表也可以对由ASP.NETLabel控件、TextBox控件和Button控件呈现的HTML元素进行样式设置。一个Label控件会输出为一个HTML<label>标签,样式表将所有的<label>标签格式化为粗体。TextBox控件和Button控件的输出为HTML<input>标签,样式表将修改<input>标签的边框样式和背景颜色。

       使用CSS的好处是使加载页面的速度更快。在外部的样式表中保存的内容越多,在每次页面请求时需要加载的内容就越少。浏览器可以加载缓存外部样式表的内容并对Web应用程序中的所有页面应用样式表。

       如果通过修改控件属性来修改控件皮肤,那么在每次页面请求时,多余的内容都会被加载到浏览器中。

       使用皮肤文件和修改控件属性没有区别。使用皮肤也会使页面变得臃肿。举例来说,如果给Label控件创建一个皮肤,当每个页面的Label控件输出时,皮肤文件中的Label的属性必须和每个页面中的Label控件进行合并。

 

3.1  在主题中添加多个CSS

       可以在主体文件夹中添加任意多个CSS文件。在主题中添加多个CSS后,在主题应用到页面时,所有的CSS也都会应用到页面。

       外部样式表连接到页面的顺序非常重要。应为一个样式表中的样式规则可以被其他样式表中的样式规则重写。

       在主题中添加多个样式表后,样式表应用到页面的顺序是按字母排序的(根据样式表文件名)。

 

4  创建全局主体

       可以在一个Web服务器端上的多个程序之间共享同一个主题。全局主题包括皮肤文件和CSS文件。在创建一个企业规模的站点并需要将页面表现方式应用到企业中的所有应用程序时,全局主题十分有用。

       在创建全局主题的方法是将主题文件夹保存在以下路径:

       WINDOWS/Microsoft.NET/Frameword/[version]/ASP.NETClientFiles/Themes

       将主题文件添加在此路径后,就可以马上在基于文件系统的网站中使用这个主题。如果需要在基于HTTP的网站上使用这个主题,还需要额外的步骤:将主题文件夹添加在以下路经:Inetput/wwwroot/aspnet_client/system_web/[version]/Themes

       手工将主题文件复制到此文件夹,或者在命令行中通过以下方式使用aspnet_regiis工具:

       Aspnet_regiis –c

       Aspnet_regiis工具在Windows/Microsoft.NET/Frameword/[version]文件夹中。打开命令提示并导航到这个文件夹就可以使用这个工具。

 

5  动态应用主题

       通过处理页面的PreInit事件可以在页面中动态应用主题。在请求页面时,这是第一个被触发的事件。在其后的LoadPreRender等事件中是不能动态应用主题的。

       例如:代码清单8910中就能通过用户在页面的点击来应用绿色主题或红色主题

       代码清单8App_Themes/GreenTheme/GreenStyle.css

html

{

     background-color:Green;

     font:14px Georgia ,Serif;

}

 

.content

{

     margin:auto;

     width:600px;

     border:solid 1px black;

     background-color:White;

     padding:10px;

}

 

h1

{

     color:Green;

     font-size:18px;

     border-bottom:solid 1px orange;

}

 

       代码清单9App_Themes/RedTheme/RedStyle.css

html

{

     background-color:Red;

     font:14px Georgia ,Serif;

}

 

.content

{

     margin:auto;

     width:600px;

     border:solid 1px black;

     background-color:White;

     padding:10px;

}

 

h1

{

     color:Red;

     font-size:18px;

     border-bottom:solid 1px orange;

}

 

       代码清单10DynamicTheme.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DynamicTheme.aspx.cs" Inherits="ThemeDemo.DynamicTheme" %>

 

<!DOCTYPE html PUBLIC "-//W 3C //DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<script runat="server">

    protected void Page_PreInit(object sender, EventArgs e)

    {

        if (Request["theme"] != null)

        {

            switch (Request["theme"])

            {

                case "Green":

                    Profile.UserTheme = "GreenTheme";

                    break;

                case "Red":

                    Profile.UserTheme = "RedTheme";

                    break;

            }

            Theme = Profile.UserTheme;

        }

    }

</script>

 

<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>Dynamic Theme</title>

</head>

<body>

    <form id="form1" runat="server">

    <div class="content">

        <h1>Dynamic Theme</h1>

        Please select a Theme:

        <ul>

            <li><a href="DynamicTheme.aspx?theme=Green">Green Theme</a></li>

            <li><a href="DynamicTheme.aspx?theme=Red">Red Theme</a></li>

        </ul>

    </div>

    </form>

</body>

</html>

       通过页面的Theme属性,特定主题可以应用到此页面。通过在PreInit事件中将主题名称(文件夹名称)赋给Theme属性,主题就会应用到页面。

       注意,被选择的主题保存在Profile对象中。当把信息保存在Profile对象中时,在浏览器多个站点时这个信息仍然可以保留。所以如果用户选择了一次自己喜欢的主题,那么当用户在以后再次回到此站点时仍然会应用此主题。

       代码清单11中的Web配置文件中定义了Profile

    <system.web>

      <profile>

        <properties>

          <add name="UserTheme"/>

        </properties>

      </profile>

    </system.web>

       因为在PreInit事件触发后,控件树并没有创建完成,所以不能引用页面中的控件。

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#,读做 "C sharp",中文译音暂时没有,非专业人士一般读"C井",专业人士一般读"C sharp"。   C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏和模版,不允许多重继承)。C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。 C# 并且C#成为ECMA与ISO标准规范。C#看似基于C++写成,但又融入其它语言如Pascal、Java、VB等。   微软c#语言定义主要是从C和C++继承而来的,而且语言中的许多元素也反映了这一点.C#在设计者从C++继承的可选选项方面比Java要广泛一些(比如说struts),它还增加了自己新的特点(比方说源代码版本定义).但它还太不成熟,不可能挤垮Java.C#还需要进化成一种开发者能够接受和采用的语言.而微软当前为它的这种新语言大造声势也是值得注意的.目前大家的反应是:"这是对Java的反击."   C#更像Java一些,虽然微软在这个问题上保持沉默.这也是意料中的事情,我觉得,因为Java近来很成功而使用Java的公司都报告说它们在生产效率上比C++获得了提高.   Java所带来的巨大影响和大家对它的广泛接受已经由工作于这种语言和平台之上的程序员数量明显的说明了(估计世界范围内共有两百五十万程序员使用Java).由这种语言写成的应用程序的数量是令人惊讶的并已经渗透了每一个级别的计算,包括无线计算和移动电话(比如日本发明的Java电话).C#能够在用户领域获得这样的礼遇吗?我们必须等待并观望,就像已经由SSI公司的CEO和主席Kalpathi S. Suresh指出来的那样,"我发现所有这些都是渐进的.如果C#不存在,我们总能回到Java或C和C++.这些都不完全是新技术;它们在更大的意义上来说只是大公司制造的市场噱头.我们必须给他们时间安顿下来看看这些是不是真的对IT工业有什么影响."
分页是Web应用程序中最常用到的功能之一,在ASP.NET中,虽然自带了一个可以分页的DataGrid(asp.net 1.1)和GridView(asp.net 2.0)控件,但其分页功能并不尽如人意,如可定制性差、无法通过Url实现分页功能等,而且有时候我们需要对DataList和Repeater甚至自定义数据绑定控件进行分页,手工编写分页代码不但技术难度大、任务繁琐而且代码重用率极低,因此分页已成为许多ASP.NET程序员最头疼的问题之一。 AspNetPager针对ASP.NET分页控件的不足,提出了与众不同的解决asp.net中分页问题的方案,即将分页导航功能与数据显示功能完全独立开来,由用户自己控制数据的获取及显示方式,因此可以被灵活地应用于任何需要实现分页导航功能的地方,如为GridView、DataList以及Repeater等数据绑定控件实现分页、呈现自定义的分页数据以及制作图片浏览程序等,因为AspNetPager控件和数据是独立的,因此要分页的数据可以来自任何数据源,如SQL Server、Oracle、Access、mysql、DB2等数据库以及XML文件、内存数据或缓存中的数据、文件系统等等。 AspNetPager 7.2 版发布 新增属性 PagingButtonLayoutType,可设置分页导航元素(数字页索引、上页、下页、首页和尾页)的布局方式,该属性值是一个PagingButtonLayoutType枚举,通过设置该属性为PagingButtonLayoutType.UnorderedList或PagingButtonLayoutType.Span,允许将这些分页导航元素包含在 与或与标签之间,以便于为这些分页元素应用CSS样式。 新增 PagingButtonClass 与 PagingButtonStyle 属性,可以单独为分页导航按钮(数字页索引、上页、下页、首页和尾页)设置CSS样式; 新增 FirstLastButtonClass 与 FirstLastButtonStyle 属性,可以单独为首页和尾页分页导航按钮设置CSS样式,如果该属性未设置,但指定了PagingButtonClass 与 PagingButtonStyle 属性的值,则首页和尾页按钮样式将使用 PagingButtonClass 与 PagingButtonStyle 属性中指定的样式; 新增 NextPrevButtonClass 与 NextPrevButtonStyle 属性,可以单独为上页和下页分页导航按钮设置CSS样式,如果该属性未设置,但指定了PagingButtonClass 与 PagingButtonStyle 属性的值,则上页和下页按钮样式将使用 PagingButtonClass 与 PagingButtonStyle 属性中指定的样式; 新增 MoreButtonClass 与 MoreButtonStyle 属性,可以单独为更多页(...)分页导航按钮设置CSS样式,如果该属性未设置,但指定了PagingButtonClass 与 PagingButtonStyle 属性的值,则上页和下页按钮样式将使用 PagingButtonClass 与 PagingButtonStyle 属性中指定的样式; 新增属性 ShowMoreButtons ,可以指定是否显示更多页按钮; 新增属性 CurrentPageButtonPosition ,可设置在每次分页后,当前页数字索引在所有的数字页索引中的显示位置,该属性值是一个PagingButtonPosition枚举,对应的值及说明如下: Beginning:当前页数字索引总是显示在所有数字页索引的最前面; End:当前页数字索引总是显示在所有数字页索引的最后面; Center:当前页数字索引总是显示在所有数字页索引的中间; Fixed:默认值,固定不变; 控件的CssClass属性仅应用于控件的窗口元素(div),将不再应用于下属分页元素; 废止属性CenterCurrentPageButton,可以用CurrentPageButtonPosition属性取代; 修改CurrentPageIndexn属性,允许在程序中任何地方以编程方式设置CurrentPageIndex的值来动态指定当前页,直接设置该属性的值时将同时引发PageChanging和PageChanged 事件,实现和点击分页按钮一样的分页功能; 修正了7.1版中设置SubmitButtonImageUrl属性后,Postback回发分页方式情况下点击数字页索引按钮不引发分页事件的bug; 修正了使用Url分页时,如果页面上没有服务器端form控件时无法注册客户端脚本的bu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值