母版页

一,什么是母版页

事先把页面通用或共有的部分抽取出来,做成一个通用性较强的模板,每个页面套用此模板可以简化设计与编码

二,母版页与页面的区别

1.扩展名——页面:.aspx    母版页:.master

2.声明指示符和类——页面:<%@ Page ...%>  派生自Page  母版页:<%@Master ....%> 派生自MasterPage

3.HTML结构:页面上有完整HTML结构,母版页一般也会有比较完整HTML结构

4.运行:页面能启动运行,母版页不能

三,母版页使用中的难点

1.交换信息

(1)从页面操作母版页

I,如何找到母版页对象

this.Master——当前页面的母版页

II,如何给母版页的控件赋值

法一:事先给母片页做好属性,通过属性来赋值。

 public string LabelValue
    {
        get
        {
            return Label1.Text;
        }
        set
        {
            Label1.Text = value;
        }
    }

法二:通过母版页对象的FindControl方法来操作。

 protected void Button1_Click(object sender, EventArgs e)
    {
        //取值
        string s = TextBox1.Text;
        //扔到母版页去
        //1.找到母版页 Master属性——当前页面所套用的母版页
        MP master = this.Master as MP;
        //2.送到母版的Label中去
        //法一:
        //master.LabelValue = s;
        //法二:
        Label lbl = master.FindControl("Label1") as Label;
        lbl.Text = s;
    }

(2)从母版页操作页面

I,使用Session+OnLoadComplete方法配合使用(与用户控件使用方法相同)

II,使用代理。在母版页中声明、创建和调用代理;在页面的PageLoad把代理挂到页面的方法中去。

 public delegate void SendValueDelegate(string s);
    public event SendValueDelegate SendValue;

    protected void Button2_Click(object sender, EventArgs e)
    {
        if (SendValue != null)
        {
            SendValue(TextBox1.Text);  //母版页中的TextBox
        }
    }
 protected void Page_Load(object sender, EventArgs e)
    {
        //找到母版页
        MP master = this.Master as MP;
        master.SendValue += master_SendValue;
    }

    void master_SendValue(string s)
    {
        TextBox1.Text = s;   //页面中的Textbox
    }

2.路径问题(和用户控件相同)

(1)控件和标签的路径:使用runat=server的控件,服务器自动转化相应的路径
(2)样式表路径(背景图):使用外部样式表。在外部样式表中指定背景图片,在母版页中引用进样式表来。在每个套用母版页的页面中,呈现的时候都会自动进行样式表引用路径的转换。(样式表引用会自动转换,但脚本文件的引用是不会自动转换需要使用ResolveClientUrl()手动转换脚本文件的路径)
(3)脚本文件。一般来说在母片页中引用脚本文件,但是需要使用ResolveClientUrl()方法来转换路径。
<script src="<%= ResolveClientUrl("Script/JavaScript.js") %>"></script>
<link href="CSS/StyleSheet.css" rel="stylesheet" />
(4)C#中的路径。使用"~/sdfas/asdf"这种应用程序路径。Response.Redirect("~/Default.aspx")

3.脚本与样式

在母版页的<head>中会生成一个<ContentPlaceHolder>它是用来为使用此母版页的页面或二级母版页提供扩展<head>中的样式和脚本的功能
如果在二级母版页中,对应的<head>中的<Content>里面一般需要再加一个<ContentPlaceHolder>用来给页面使用。

4.命名(与用户控件相同)

原文地址:https://www.cnblogs.com/William-1234/p/4563732.html