ASP.NET 母版页(嵌套、访问母版页的控件和属性)


友情链接:母版页的概述与创建

一、母版页的嵌套

嵌套就是大的容器套装小的容器。嵌套母版页就是指创建一个大的母版页,在其中半酣另外一个母版页。利用母版页可以创建组件化的母版页如下图所示:

在这里插入图片描述
下面通过一个例子实现一个简单的嵌套母版页功能:

首先创建一个项目,然后创建一个母版页,名字为MainMaster,接着着创建一个Web窗体母版页(嵌套)注意是嵌套!命名为:SubMaster,然后添加一个包含母版页的Web窗体,命名为:Default.aspx并将其作为SubMaster的内容页。友情提示:快捷键ctrl+shift+a弹出添加新项页面。

创建完成之后,我们的解决方案资源管理器是这个样子的:
在这里插入图片描述
然后开始下一步操作,在MainMaster.Master界面开始写代码:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="MainMaster.master.cs" Inherits="_01.MainMaster" %>

<!DOCTYPE html>

<html>
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>主母版页</title>
    <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <table style="width:759px;height:634px" cellpadding="0" cellspacing="0" align="center">
                <tr><td style="background-image:url(Image/banner.jpg);width:759px;height:153px"></td></tr>
                <tr><td style="width:759px;height:374px" align="center" valign="middle">
                    <asp:ContentPlaceHolder ID="MainContent" runat="server">

                        </asp:ContentPlaceHolder>
                    </td></tr>
                <tr><td style="background-image:url(Image/3.jpg);width:759px;height:107px"></td></tr>
            </table>
        </div>
    </form>
</body>
</html>

这个是主母版页的代码,在这个代码中在适当的位置占了一个ContentPlaceHolder

子母版页以.master为扩展名,代码包含代码头声明Content控件。不包含主母版页中的<html> <body>等HTML元素,然后开始写代码:

<%@ Master Language="C#" MasterPageFile="~/MainMaster.Master" AutoEventWireup="true" CodeBehind="SubMaster.master.cs" Inherits="first.SubMaster" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <table style="background-image:url(Image/2.jpg);width:759px;height:374px;">
        <tr>
            <td align="center" valign="middle">
                <h1>子母版页</h1>
            </td>
            <td align="center" valign="middle" style="width:451px;">
                <asp:ContentPlaceHolder ID ="SubContent" runat="server"></asp:ContentPlaceHolder>
            </td>
        </tr>
    </table>
</asp:Content>

在子母版页的@Master指令中添加了MasterPageFile属性以设置夫母版页路径,从而实现嵌套。

接着就是内容页的代码了,内容页的代码包含两部分,即代码头声明Content控件。由于内容页绑定子母版页,所以代码头中的属性MasterPageFile必须设置为子母版页的路径。代码如下:

<%@ Page Title="" Language="C#" MasterPageFile="~/SubMaster.master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="first.Default" %>
<asp:Content ID ="Content2" ContentPlaceHolderID="SubContent" runat="server">
    <table style="width:451px;height:391px">
        <tr>
            <td><h1>内容页</h1></td>
        </tr>
    </table>
</asp:Content>

大功告成!看一下效果:

在这里插入图片描述


二、访问母版页的控件和属性

内容页访问母版页中的属性、方法和控件有一定的限制。对于属性和方法的规则是:如果它们在母版页上被声明为公共成员,则可以访问它们。在引用母版页上的控件时,没有只能访问公共成员的这种限制。

1、使用Master.FindControl()方法访问母版页上的控件

在内容页中,Page对象具有一个公共属性Master,该属性能够实现对相关母版页基类MasterPage的引用。可以用MastetPage对象实现对母版页中各个对象的访问,但由于母版页中的控件时受保护的,不能直接访问,那么就必须使用MasterPage对象中的FindControl方法实现。

接下来看一个例子,内容页中定义一个Label将他赋值为母版页上的Label的内容:

新建网站,添加母版页MasterPage.master,再添加一个Web窗体命名为Default.aspx,作为内容页。然后开始写代码:

MasterPage.master代码(部分):

            <table style="width:759px;height:634px" align="center">
                <tr><td>
                    <asp:Label ID="Mlabel" runat="server" Text="Label"></asp:Label>
                    </td></tr>
                <tr><td>
                    <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
                         </asp:ContentPlaceHolder>
                    </td></tr>
            </table>

MasterPage.master.csPage_Load方法代码:

        protected void Page_Load(object sender, EventArgs e)
        {
            this.Mlabel.Text = DateTime.Now.ToString();
        }

Default.aspx代码:

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Master.FindControl访问母版页控件.Default" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
</asp:Content>

Default.aspx.cs代码中的Page_LoadComplete代码:

        protected void Page_LoadComplete(object sender,EventArgs e)
        {
            Label MLable1 = (Label)this.Master.FindControl("Mlabel");
            this.Label2.Text = MLable1.Text;
        }

大功告成!

2、引用@MasterType指令访问母版页上的属性

引用母版页中的属性和方法,需要在内容页中使用@MasterType指令,将内容页的Master属性强类型化,即通过@MasterType指令创建与内容页相关的母版页的强类型引用。在设置@MasterType指令时,必须设置VirtualPath属性用于指定与内容页相关的母版页的存储地址。

看个例子,拿上面的步骤来继续实现:

首先在MasterPage.master.cs代码中,写入以下代码(定义了个属性)

        string mValue = "";
        //定义属性
        public string MValue
        {
            get { return mValue; }
            set { mValue = value; }
        }

然后把<%= this.MValue%>绑定到MasterPage.master代码页可以放在Label控件下面。

然后就是去设置VirtualPath地址了,打开Default.aspx,粘贴以下代码在最上面:

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

最后在Default.aspx.cs代码中访问一下这个属性:

        protected void Page_Load(object sender, EventArgs e)
        {
            Master.MValue = "Welcome";
        }

大功告成喽~~!!!


  • 6
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Part1第一部分: 相信大家找得到该书的源代码部分 也就是这部分内容 因此我便无偿奉送 让大家下载试试。 若感觉可以方可继续下载电子书部分。 1.本书1~21章所附代码的运行环境 操作系统:Windows Server 2003或Windows XP Professional 开发环境:Microsoft Visual Studio 2005 数据库:SQL Server 2005 Web服务器:IIS 5.1及以上版本 2.本书所附光盘范例 第1章(\Chapter 01) 示例描述:本章演示ASP.NET 2.0网站的预编译以及学习ASP.NET 2.0的前置知识。 WebSite文件夹 创建的ASP.NET 2.0 Web站点。 www文件夹 第一个用C#开发的Web应用程序。 bianyi.bat 编译网站的批处理文件。 form.html 表单范例。 css.html CSS范例。 第3章(\Chapter 03) 示例描述:本章介绍C# 2.0程序设计基础。 3-01.cs 第一个C#程序。 3-02.cs 不导入命名空间来改写程序3-01.cs。 3-03.cs ReadLine()方法读数据。 3-04.cs 常量的使用。 3-05.cs 整型类型的使用。 3-06.cs 结构类型的使用。 3-07.cs 枚举类型的使用。 3-08.cs 用一个输入参数通过值传递一个变量给一个方法。 3-09.cs 一维数组的使用。 3-10.cs 使用代理类型。 3-11.cs 使用接口。 3-12.cs 装箱操作。 3-13.cs 字符串操作。 3-14.cs if语句的使用。 3-15.cs switch语句的使用。 3-16.cs while语句的使用。 3-17.cs do-while语句的使用。 3-18.cs for语句的使用。 3-19.cs 异常捕获:try-catch语句的使用。 3-20.cs 异常捕获:try-finally语句的使用。 3-21.cs 异常捕获:try-catch-finally语句的使用。 3-22.cs get和set对属性的值进行读写操作。 3-23.cs 方法的使用。 3-24.cs 继承演示。 3-25.cs 多态性演示。 第4 章(\Chapter 04) 示例描述:本章学习ASP.NET 2.0面基本对象。 4-01.aspx aspx面中添加一个Lable标签。 4-02.aspx 读出Application的属性值。 4-03.aspx 读出SessionID的值。 4-04.aspx 创建Session对象。 4-05.aspx 读取传递的Session值并显示。 4-06.aspx 使用Response对象的Write()方法。 4-07.aspx

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值