母版页
一,什么是母版页
事先把页面通用或共有的部分抽取出来,做成一个通用性较强的模板,每个页面套用此模板可以简化设计与编码
二,母版页与页面的区别
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.命名(与用户控件相同)