本文给读者一个所有基于母板页的网页自动获得样式表的技巧,就是由控件提供的对相对路径调整的支持。可以在母板页里使用这个东西来轻松地引用一个在整个项目里重用的.CSS 样式表文件,不管这个项目是相对于根目录的还是一个子应用。
推荐一个可在ASP.NET 2.0中利用的技巧是,当使用CSS时,使用母板页的功能给你的网站提供统一的UI,使用母板页在一个地方引用所有的样式表,这样,所有基于这个母板页的网页就会自动获得这些样式表。
可利用的一个技巧是由 <head runat="server"> 控件提供的对相对路径调整的支持。可以在母板页里使用这个东西来轻松地引用一个在整个项目里重用的.CSS 样式表文件,不管这个项目是相对于根目录的还是一个子应用:
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="Site.master.cs" Inherits="Site" %>
<html><head runat="server">
<title>Master Page</title>
<link href="StyleSheet.css" rel="stylesheet" type="text/css" />
</head><body>
<form id="form1" runat="server">
<asp:contentplaceholder id="MainContent" runat="server">
</asp:contentplaceholder>
</form></body></html>
<head> 控件的路径调整功能然后就可以取一个 .CSS 样式表文件的相对路径,然后在运行时正确地输出其绝对路径,不管它是个相对于根目录的网站还是一个子应用的一部分。
然后,网站上的页面就可以类似下面这样的内容,这些网页会在运行时和在设计时VS的HTML即见即所得(WYSIWYG)设计器里自动获得样式表设置:
<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Title="Sample Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" Runat="Server">
<h1>Root Web Site Sample</h1>
<a href="/Products">Click here to go to the Products section (note the absolute path) </a>
</asp:Content>
因为包含在 .CSS 样式表文件中的图片引用是相对于 .CSS文件的路径而被浏览器引用的,而不是相对于使用样式表文件的网页的路径的,可以把这个行为与上面的这个 <head runat="server"> 的逻辑结合起来,使得你的图片在根网站和子应用两个情形下自动生效,即使后来改变路径也不会出问题。
通过这个方式引用的图片在VS 2005的HTML即见即所得(WYSIWYG)设计器里也会正确地显示,不这样做的话,VS 2005有时会有困难决定获取图片引用的“/”根路径。