Master Page------(asp.net2.0 new technology)

Master Page------(asp.net2.0 new technology)

使用MasterPage
  • 如同使用Theme可以格式化整个网站各个控件的显示模式一样,Master Page可以用来定义网站中不同网页的相同部分,例如整个网站都包括同样的格局,同样的页头,同样的页脚,同样的导航栏。这个时候,可以把这些控件定义在一个masterpage上。其他网页只需要继承这个Masterpage即可。
  • Master page文件本身的写法和其他aspx页面并没有什么不同,主要的区别在于,Master page包含一个ContentPlaceHolder ,这个控件定义了一些可以被其他页面继承的区域,该区域内可以被其他页面用来摆放自己的控件。
eg: Master page文件MyMaster.master
<%@ Master Language="VB" CodeFile="MyMaster.master.vb" Inherits="MyMaster" %>

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

<head runat="server">

<title>Untitled Page</title>

</head>

<body>

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

<div>

<asp:contentplaceholder id="ContentPlaceHolder1" runat="server">

</asp:contentplaceholder>

<br />

<asp:AdRotator ID="AdRotator1" runat="server"  DataSourceID="XmlDataSource1"/>

<asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/ads.xml">

</asp:XmlDataSource>

</div>

</form>

</body>

</html>

Master page文件可以拥有自己的服务器端代码文件,该文件定义了一个contentplaceholder控件为了给继承的页面使用控件定义了一个AdRotator(广告)控件和它关联的数据源XmlDataSource 任何继承MyMaster.master的aspx文件都会在下方有一个广告条!
format.aspx
<%@ Page Language="VB" MasterPageFile="~/MyMaster.master" AutoEventWireup="false"

CodeFile="frommaster.aspx.vb" Inherits="frommaster" title="Untitled Page" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

<asp:Label ID="Label1" runat="server" Text="name"></asp:Label>

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

<asp:Button ID="Button1" runat="server" Text="submit" />

<br />

<asp:Label ID="Label2" runat="server">

</asp:Label>

</asp:Content>

注意事项

  • 1.在*.aspx文件中无法动态的改变*.master文件中的控件的状态
  • 2.如果在Master Page中定义了Theme,VS2005会进行警告。实际运行将以子页面的theme为基准
  • 3.在web.config中可配置master page为整个站点使用
<configuration>

<system.web>

<pages masterPageFile="~/Site.master" />

</system.web>

</configuration>

  • 4.动态应用Master Page
void Page_PreInit (Object sender, EventArgs e)

{

Page.MasterPageFile = "~/Site.master";

}

  • 5.操作Master Page中的控件 (弱类型)
<asp:Label ID="Title" RunAt="server" />

((Label) Master.FindControl ("Title")).Text = "Orders";

  • 6.操作Master Page中的控件 (强类型)
<asp:Label ID="Title" RunAt="server" />

.

.

.

<script language="C#" runat="server">

public string TitleText

{

get { return Title.Text; }

set { Title.Text = value; }

}

</script>

content page加入如下声明

<%@ MasterType VirtualPath="~/Tree.master" %>

这样Asp.net编译器会为我们生成一个强类型的Master属性(在页面文件的CS文件的类中).

这样,我们就可以直接通过Master.Info来操作MasterPage上的东西.

调用如下

Master.TitleText = "Orders";

  • 7.响应Master Page的事件
ContentPage要响应MasterPage页上某些控件的事件(例如:Button).
和Scenario 1提到的一样,可以把MasterPage的Button当做属性暴露出来,
在ContentPage页对其的Click事件进行订阅.但这样造成MasterPage和ContentPage页的藕合太高.
更好的Pattern应该是在App_Code中定义事件,委托.在MasterPage中定义事件,并且暴露该事件.
这样在ContentPage中就可以订阅该事件.
  • 8.Master Page嵌套
Master Page可以嵌套使用,嵌套的Master Page只能含有Content控件,
但Content控件本身可以再嵌套 ContentPlaceHolders控件。
<!-- Orders.Master -->

<%@ Master MasterPageFile="~/Site.Master" %>

<asp:Content ContentPlaceHolderID="..." RunAt="server">

<asp:ContentPlaceHolder ID="..." RunAt="server">

...

</asp:ContentPlaceHolder>

<asp:Content>

你可能感兴趣的:(asp.net)