如果母版页和内容页在同一目录中,以上代码将正常运行;但是,如果内容页实际上在另一个位置,这个相对路径就是错误的。要解决此问题,可以采取以下方法之一:
在母版页中使用绝对 URL 路径,例如 <img src="/uploadfile/201210/12/D8233454735.gif" />
在服务器控件中使用相对 URL 或与应用程序相关的 URL 来代替静态标记,例如 <asp:Image ImageUrl="~/images/banner.gif" runat="server" />
下面的示例演示了此项技术。内容页已经移至包含母版页的目录下的“Pages”子目录中。母版页已更新为使用服务器控件代替 HTML:
<head runat="server"> <link rel="stylesheet" href="StyleSheet.css" type="text/css" /></head><a id="A1" href="pages/daffodil.aspx" runat="server">Daffodil</a/><asp:Image ID="Image1" AlternateText="Water Lillies" ImageUrl="~//uploadfile/201210/12/A9233454745.jpg" runat="server"/>
VB URL Mapping in Master Pages
从代码访问母版页
除了重写内容外,内容页也可以通过编程方式访问其母版页。内容页使用 <%@ MasterType %> 指令来创建对母版页的强类型引用,并指定到母版页的虚拟路径:
<%@ MasterType VirtualPath="Site.master" %>
然后,内容页可以使用 Page 类的 Master 属性来引用母版页:
VB
Master.FooterText = "This is a custom footer";AdRotator ad = (AdRotator)Master.FindControl("MyAdRotator");
Master.FooterText = "This is a custom footer"Dim ad As AdRotator = Master.FindControl("MyAdRotator")
在上面的示例代码中,FooterText 是在母版页上公开的公共属性,而 MyAdRotator 是母版页上的控件。下面的示例演示此代码的运行:
VB Accessing Master Pages in Code
嵌套母版页
内容页也可以是母版页。即,可以从一个母版页派生另一个母版页。例如,您可以有一个顶层母版页,表示您的站点的总体站点页眉/页脚和导航;然后是从这个顶层母版页派生的各个不同的母版页,用于定义您的站点中各个分区的不同外观。然后,内容页从其所属分区相应的分区母版页派生。下面的示例演示了以上概念,该示例将 Florist 示例站点分成 Annuals 和 Perrennials 两个分区。