zoukankan      html  css  js  c++  java
  • 嵌套母版页

    写在前面的话:

    对于一个项目来说,我们可能会用到许多的母版页+内容页的组合.那么当我们使用到多个母版页时,我们可能会遇到这样的问题.在不同的母版页内加载相同的js和css内容.

    如果一个js或css文件在项目中的位置发生了变化,我们就要修改多个母版页的js和css的link.

    对此,我们或许可以使用嵌套母版页的形式,来使我们尽量只改变一处的link,就可以使所有页面的js或css得到更新.

    下面,我们举例说明.

    例子介绍:

    在例子中,我们有以下内容:

    1.一个main.master页,在这个页面中,有一个ID为btn_main的Button和一个div

    2.一个sub1.master页,在这个页面中,有一个ID为btn_sub1的Button和一个div

    3.一个WebForm1.aspx内容页,有一个ID为btn_page的Button和一个div

    4.一个1.js文件,js文件中有一个myAlert()的函数

    5.一个1.css文件,css文件中有.myBack样式

    文档结构如下:

    image

    例子展示内容:

    1.通过main.master如何引用公共的js和css文件

    2.通过WebForm1.aspx页,如何访问main.master的button、访问sub1.master的button

    例子:

    main.master的代码:

    <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Main.master.cs" Inherits="WebMasterTest.masterpages.Main" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <link href="../css/1.css" rel="stylesheet" type="text/css" />
        <script src="<%= Request.ApplicationPath%>/scripts/1.js" type="text/javascript"></script>
        <asp:ContentPlaceHolder ID="head" runat="server">
        </asp:ContentPlaceHolder>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:Button ID="btn_main" runat="server" Text="我是主母版页上的按钮" OnClientClick="myAlert('我是主母版页上的按钮');" />
            <div class='myBack'>主模板页</div>
            <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
           
            </asp:ContentPlaceHolder>
        </div>
        </form>
    </body>
    </html>

    注意:

    1.css文件的路径是相对于master页的.

    2.js文件的路径是相当于内容页的.此时,我们使用的是绝对路径的方式来引用js文件.我们使用的是<%= Request.ApplicationPath%>/来获取路径.

    特别注意:ApplicationPath和后面的%>/之间,不能有空格.

    sub1.master的代码

    <%@ Master Language="C#" MasterPageFile="~/masterpages/Main.Master" AutoEventWireup="true" 
        CodeBehind="Sub1.master.cs" Inherits="WebMasterTest.masterpages.Sub1" %>
    <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
        <asp:ContentPlaceHolder ID="head" runat="server">
        </asp:ContentPlaceHolder>
    </asp:Content>
    <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
        <asp:Button ID="btn_sub" runat="server" Text="我是子母版页上的按钮" OnClientClick="myAlert('我是子母版页上的按钮');"  />
        <div class='myBack'>子模板页</div>
        <asp:ContentPlaceHolder ID="ContentPlaceHolder11" runat="server">
        </asp:ContentPlaceHolder>
        <asp:ContentPlaceHolder ID="ContentPlaceHolder12" runat="server">
        </asp:ContentPlaceHolder>
    </asp:Content>

    WebForm1.aspx内容页的代码:

    <%@ Page Title="" Language="C#" MasterPageFile="~/masterpages/Sub1.master" AutoEventWireup="true" 
    CodeBehind="WebForm1.aspx.cs" Inherits="WebMasterTest.pages.WebForm1" %>
    <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
    </asp:Content>
    <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder11" runat="server">
    </asp:Content>
    <asp:Content ID="Content3" ContentPlaceHolderID="ContentPlaceHolder12" runat="server">
        <asp:Button ID="btn_page" runat="server" Text="这是内容页上的按钮" OnClientClick="myAlert('我是内容页上的按钮');" />
        <div class='myBack'>内容页</div>
        <img alt="" height="120" src="../css/images/成长的历程.jpg" width="120" />
    </asp:Content>

    此时,如果js或css的文件路径发生了变化,我们也只需变动main.master页面中的link路径即可.同时.我们在sub1.master页中也放置了id为head的contentPlaceHolder元素,这样,在webform1.aspx页中,用户也可以自行添加需要的js文件或函数.

    我们可以看到,在这3个页面上的div中,我们均可以引用到class为myBack的css类.

    那么我们如何在webform1.aspx页访问main.master和sub1.master页中的button呢.在webform1.aspx.cs中,代码如下:

    protected void Page_Load(object sender, EventArgs e)
    {
        //获取main.master
        var mainMaster = Page.Master.Master as MasterPage;
    
        //获取main.master页上的button
        var btnmaster = mainMaster.FindControl("btn_main") as Button;
    
        //获取sub1.master页的button
        //      这个有些特殊.不能通过Page.Master.FindControl("btn_sub")
        //      而应通过如下的方式,获取子母版页上的button
        var btnSub = mainMaster.FindControl("ContentPlaceHolder1")
            .FindControl("btn_sub") as Button;
    }

    如此,我们就实现了在内容页访问母版页的内容.

  • 相关阅读:
    使用WCF建立起Silverlight客户端与服务端的桥梁
    Silverlight WCF RIA服务(三十三)身份验证、角色、个性化 4
    陶哲轩实分析习题 12.1.3
    Asymptote 学习记录(6) 练习用模块roundedpath画出一个图
    使用Asymptote的循环功能画出绿叶阵
    使用Asymptote的循环功能画出绿叶阵
    度量空间的一个例子:离散度量空间
    练习: 使用Asymptote 画出字母R的轮廓曲线
    练习: 使用Asymptote 画出字母R的轮廓曲线
    陶哲轩实分析命题 11.10.7
  • 原文地址:https://www.cnblogs.com/oneword/p/2842195.html
Copyright © 2011-2022 走看看