1》
首先新建一个Web窗体母版页。默认的名字就是Site1.Master
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site1.master.cs" Inherits="WebApp.Site1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<asp:ContentPlaceHolder ID="head" runat="server">
<%--其实这个ContentPlaceHolder控件就是一个占位符。用于展示子页面的内容信息--%>
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<div>
<%--公共的内容,我们可以写在母版页中--%>
<table>
<tr><td>编号</td><td>姓名</td><td>年龄</td></tr>
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
<%--其实这个ContentPlaceHolder1控件就是一个占位符。用于展示子页面的内容信息--%>
</asp:ContentPlaceHolder>
</table>
<asp:TextBox ID="TextBox1" runat="server" Text="123"></asp:TextBox>
</div>
</form>
</body>
再新建一个包含母版页的Web窗体
<%@ Page Title="这里是子页面的Title" Language="C#" MasterPageFile="~/Site1.Master" AutoEventWireup="true" CodeBehind="WebForm7.aspx.cs" Inherits="WebApp.WebForm7" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
<%--在这里写子页面的head内容--%>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<%--在这里写子页面的内容--%>
<tr>
<td>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</td>
</tr>
</asp:Content>
在这个子页面中我们实现一个小功能,就是点击Button按钮,将母版页中的TextBox1控件的内容的值赋给子页面的Lable1控件
(注意:只有子页面可以获取母版页中的控件,母版页中的不可以获取子页面的控件)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApp
{
public partial class WebForm7 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
//在子页面获取母版页中的控件
//Cnotrol是所有控件的父类 (this.Master表示这个页面的母版页)
//this.Master.FindControl("TextBox1");表示获取母版页中id为TextBox1的这个控件
//为什么要用这种方式来获取呢?因为WebForm7这个页面继承的是Page类,而不是母版页类Site1
Control ctl = this.Master.FindControl("TextBox1");
if (ctl is TextBox)
{
TextBox tb1 = (TextBox)ctl;
this.Label1.Text = tb1.Text;
}
}
}
}
特别注意:
在母版页中放一张图片,或者指定资源路径等。要注意它是否可以在子页面中正确显示。
下面是展示在母版页怎么用客户端控件和 服务端控件来放置一张图片。
如果用手写客户端控件来放置一张图片:
<%--ResolveUrl()方法的作用是:将 URL 转换为在请求客户端可用的 URL。--%>
<img src='<%= ResolveUrl("images/123.jpg") %>' />
如果用服务端控件来展示图片 (~/ 表示网站根目录。 ~符号只能服务器控件,或者是后台代码中使用,客户Html标签不支持)
~/images/123.jpg 就表示从网站根目录下开始找,然后找到Images文件夹,然后再Images文件夹下找到123.jpg文件
<asp:Image ID="Image1" ImageUrl="~/images/123.jpg" runat="server" />