母版页使用.docx

上传人:b****8 文档编号:9010117 上传时间:2023-02-02 格式:DOCX 页数:24 大小:40.87KB
下载 相关 举报
母版页使用.docx_第1页
第1页 / 共24页
母版页使用.docx_第2页
第2页 / 共24页
母版页使用.docx_第3页
第3页 / 共24页
母版页使用.docx_第4页
第4页 / 共24页
母版页使用.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

母版页使用.docx

《母版页使用.docx》由会员分享,可在线阅读,更多相关《母版页使用.docx(24页珍藏版)》请在冰豆网上搜索。

母版页使用.docx

母版页使用

母版页使用详解收藏

母版页是VS2005中新引入的一个概念,它很好地实现界面设计的模块化,并且实现实现了代码的重用。

它就像婚纱影楼中的婚纱模板,同一个婚纱模板可以给不同的新人用,只要把他们的照片贴在已有的婚纱模板就可以形成一张漂亮的婚纱照片,这样可以大大简化婚纱艺术照的设计复杂度。

这里的母版页就像婚纱模板,而内容页面就像两位新人的照片。

在VS2003中没有母版页,要实现这种设计重用的效果,我们只能用“用户控件”来实现,但用户控件没有一种可视化的组合外观,使用起来不太方便。

母版页(扩展名是.master)

它的使用跟普通的页面一样,可以可视化的设计,也可以编写后置代码。

与普通页面不一样的是,它可以包含ContentPlaceHolder控件,ContentPlaceHolder控件就是可以显示内容页面的区域。

代码如下:

<%@MasterLanguage="C#"AutoEventWireup="true"CodeFile="MasterPage.master.cs"Inherits="MasterPage"%>

......

contentplaceholderid="ContentPlaceHolder1"runat="server">

contentplaceholder>

......

注意:

1、这里的声明指示符是“<%@Master...%>”

2、其内部包含

contentplaceholder......>控件

内容页(扩展名是.aspx)

在建立内容页面的时候,在“添加新项”对话框中要选中“选择母版页”复选框。

这样建立的页面就是内容页面,内容页面在显示的时候会把母版面的内容一起以水印淡化的形式显示出来,而在母版页中的ContentPlaceHolder控件区域会被内容页面中的Content控件替换,程序员可以在这里编写内容页面中的内容。

代码如下:

<%@PageLanguage="C#"MasterPageFile="~/MasterPage/MP.master"AutoEventWireup="true"CodeFile="Show1.aspx.cs"Inherits="MasterPage_Show1"Title="UntitledPage"%>

ContentID="Content1"ContentPlaceHolderID="ContentPlaceHolder1"Runat="Server">

Content>

注意:

1、这里的声明指示符中多了一项MasterPageFile="~/MasterPage/MP.master",这一项是在创建内容页面时根据“选择母版页”复选框的选中情况生成的。

它指明了该页是内容页面,也指明了该内容页面的母版页是哪个页面。

2、“

Content......>”就是要在其中显示的内容。

一、在母版页中编写后台代码,访问母版页中的控件:

与普通的aspx页面一样,双击按钮即可编写母版页中的代码

二、在内空页面中编写后台代码,访问内容页面中的控件:

与普通的aspx页面一样,双击按钮即可编写母版页中的代码

三、在内容页面中编写代码访问母版页中的控件:

在内容页面中有个Master对象,它是MasterPage类型,它代表当前内容页面的母版页。

通过这个对象的FindControl方法,我们可以找到母版面中的控件,这样就可以在内容页面中操作母版页中的控件了。

TextBoxtxt=(TextBox)((MasterPage)Master).FindControl("txtMaster");

txt.Text=this.txtContent1.Text;;

四、在内容页面中编写代码访问母版页中的属性和方法:

仍可能通过Master对象进行访问,只不过在这里要把Master对象转换成具体的母版页类型,然后再调用母版页中的属性和方不法。

这里要说明的是:

母版页中要被内容页面调用的属性和方法必须是Public修改的。

否则无法调到。

假设母版页中有下面的属性和方法:

publicstringTextValue

{

get

{

returnthis.txtMaster.Text;

}

set

{

this.txtMaster.Text=value;

}

}

publicvoidshow(stringstr)

{

txtMaster.Text=str;

}

在内容页面中可以通过下代的代码来实现对母版页中方法的调用:

((MasterPage_MP)Master).show(this.txtContent1.Text);

((MasterPage_MP)Master).TextValue=this.txtContent1.Text;

五、在母版页中访问内容页面的控件:

在母版页中可以通过在ContentPlaceHolder控件中调用FindControl方法来取得控件,然后对控件进行操作。

((TextBox)this.ContentPlaceHolder1.FindControl("txtContent1")).Text=this.txtMaster.Text;

六、在母版页中访问内容页面中的方法和属性:

在母版页中调用子页面中的属性和方法有点难度,因为我们无法像上一步中那样通过FindControl来找到方法和属性。

于是我们想到在母版面的声明指示符中加入下面的代码:

<%@ReferencePage="~/MasterPage/Show1.aspx"%>

在运行的时候回发现有错误,错误的内容是“无法实现循环引用”。

这是因为默认在子页面中引用了母版页,你也就不能再在母版页中引用子页面了。

我在网上也没找到更好的解决方法,但这使我们想起C#是的“反射”,它可以使我们动态获取页面对象,并且可以调用它的属性和方法。

代码如下:

Typet=this.ContentPlaceHolder1.Page.GetType();

PropertyInfopi=t.GetProperty("ContentValue");//获取ContentValue属性

pi.SetValue(this.ContentPlaceHolder1.Page,this.txtMaster.Text,null);//给属性赋值

MethodInfomi=t.GetMethod("SetValue");//获取SetValue()方法

object[]os=newobject[1];//建造输入参数

os[0]=txtMaster.Text;

mi.Invoke(this.ContentPlaceHolder1.Page,os);//调用SetValue方法

七、在有多个内容页面使用母版面的情况下,在母版页中根据不同的内容页面实现不同的操作

在母版页中可以加入多个不同的内容页面,但在设计期间,我们无法知道当前运行的是哪个内容页面。

所以只能通过分支判断当前运行的是哪个子页面,来执行不同的操作。

这里也用到了反射的知识。

代码如下:

strings=this.ContentPlaceHolder1.Page.GetType().ToString();//取出内容页面的类型名称

if(s=="ASP.default17_aspx")//根据不同的内容页面类型执行不同的操作

{

((TextBox)this.ContentPlaceHolder1.FindControl("TextBox2")).Text="MastPage";

}

elseif(s=="ASP.default18_aspx")

{

((TextBox)this.ContentPlaceHolder1.FindControl("TextBox2")).Text="HelloMastPage";

}

八、在母版面与内容页面中JS代码的操作

在母版页或内容页面中的控件运行之后会自动生成ID,如文本框的ID是txtContent1,在运行之后ID会自动变为ctl00_ContentPlaceHolder2_txtContent1,name属性会变为ctl00$ContentPlaceHolder2$txtContent1。

在JS代码中,我们用document.getElementById()方法,根据id取得控件对象的时候,应当使用ctl00_ContentPlaceHolder2_txtContent1这个ID名,否则会产生“未找到对象”的异常。

(车延禄)

母版页运行机制

母版页仅仅是一个页面模板,单独的母版页是不能被用户所访问的。

单独的内容页也不能够使用。

母版页和内容页有着严格对应关系。

母版页中包含多少个ContentPlaceHolder控件,那么内容页中也必须设置与其相对应的Content控件。

当客户端浏览器向服务器发出请求,要求浏览某个内容页面时,ASP.NET引擎将同时执行内容页和母版页的代码,并将最终结果发送给客户端浏览器。

母版页和内容页的运行过程可以概括为以下5个步骤。

(1)用户通过键入内容页的URL来请求某页。

(2)获取内容页后,读取@Page指令。

如果该指令引用一个母版页,则也读取该母版页。

如果是第一次请求这两个页,则两个页都要进行编译。

(3)母版页合并到内容页的控件树中。

(4)各个Content控件的内容合并到母版页中相应的ContentPlaceHolder控件中。

(5)呈现得到结果页。

母版页和内容页事件顺序

(1)母版页中控件Init事件;

(2)内容页中Content控件Init事件;

(3)母版页Init事件;

(4)内容页Init事件;

(5)内容页Load事件;

(6)母版页Load事件;

(7)内容页中Content控件Load事件;

(8)内容页PreRender事件;

(9)母版页PreRender事件;

(10)母版页控件PreRender事件。

(11)内容页中Content控件PreRender事件。

使用母版页的优点:

(1)有利于站点修改和维护,降低开发人员的工作强度

(2)有利于实现页面布局

(3)提供一种便于利用的对象模型

发表于@2007年12月29日 20:

38:

00|评论

(1)|编辑|举报|收藏

旧一篇:

使用CascadingDropDown控件连接数据库|新一篇:

GridView日期的绑定格式

本文来自CSDN博客,转载请标明出处:

 ASP.NET母版页概述

  开启低带宽视图

语言筛选器:

全部

VisualBasic

C#

C++

J#

JScript

XAML

F#

此页面仅适用于

MicrosoftVisualStudio2005/.NETFramework2.0

同时提供下列产品的其他版本:

∙MicrosoftVisualStudio2008/.NETFramework3.5

ASP.NET

ASP.NET母版页概述

使用ASP.NET母版页可以为应用程序中的页创建一致的布局。

单个母版页可以为应用程序中的所有页(或一组页)定义所需的外观和标准行为。

然后可以创建包含要显示的内容的各个内容页。

当用户请求内容页时,这些内容页与母版页合并以将母版页的布局与内容页的内容组合在一起输出。

母版页的工作原理

母版页实际由两部分组成,即母版页本身与一个或多个内容页。

注意

您也可以嵌套母版页。

有关详细信息,请参见嵌套的ASP.NET母版页。

母版页

母版页为具有扩展名.master(如MySite.master)的ASP.NET文件,它具有可以包括静态文本、HTML元素和服务器控件的预定义布局。

母版页由特殊的@Master指令识别,该指令替换了用于普通.aspx页的@Page指令。

该指令类看起来类似下面这样。

VisualBasic

复制代码

<%@MasterLanguage="VB"%>

C#

复制代码

<%@MasterLanguage="C#"%>

@ Master指令可以包含的指令与@Control指令可以包含的指令大多数是相同的。

例如,下面的母版页指令包括一个代码隐藏文件的名称并将一个类名称分配给母版页。

VisualBasic

复制代码

<%@MasterLanguage="VB"CodeFile="MasterPage.master.vb"Inherits="MasterPage"%>

C#

复制代码

<%@MasterLanguage="C#"CodeFile="MasterPage.master.cs"Inherits="MasterPage"%>

除@ Master指令外,母版页还包含页的所有顶级HTML元素,如html、head和form。

例如,在母版页上可以将一个HTML表用于布局、将一个img元素用于公司徽标、将静态文本用于版权声明并使用服务器控件创建站点的标准导航。

您可以在母版页中使用任何HTML元素和ASP.NET元素。

可替换内容占位符

除会在所有页上显示的静态文本和控件外,母版页还包括一个或多个ContentPlaceHolder控件。

这些占位符控件定义可替换内容出现的区域。

接着在内容页中定义可替换内容。

定义ContentPlaceHolder控件后,母版页可能看起来类似于下面这样。

VisualBasic

复制代码

<%@MasterLanguage="VB"%>

DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML

1.1//EN""http:

//www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

Masterpagetitle

contentplaceholderid="Main"runat="server"/>

contentplaceholderid="Footer"runat="server"/>

C#

复制代码

<%@MasterLanguage="C#"%>

DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML

1.1//EN""http:

//www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

Masterpagetitle

contentplaceholderid="Main"runat="server"/>

contentplaceholderid="Footer"runat="server"/>

内容页

通过创建各个内容页来定义母版页的占位符控件的内容,这些内容页为绑定到特定母版页的ASP.NET页(.aspx文件以及可选的代码隐藏文件)。

通过包含指向要使用的母版页的MasterPageFile属性,在内容页的@ Page指令中建立绑定。

例如,一个内容页可能包含下面的@ Page指令,该指令将该内容页绑定到Master1.master页。

VisualBasic

复制代码

<%@PageLanguage="VB"MasterPageFile="~/MasterPages/Master1.master"Title="ContentPage"%>

C#

复制代码

<%@PageLanguage="C#"MasterPageFile="~/MasterPages/Master1.master"Title="ContentPage"%>

在内容页中,通过添加Content控件并将这些控件映射到母版页上的ContentPlaceHolder控件来创建内容。

例如,母版页可能包含名为Main和Footer的内容占位符。

在内容页中,可以创建两个Content控件,一个映射到ContentPlaceHolder控件Main,而另一个映射到ContentPlaceHolder控件Footer,如下面的图中所示。

替换占位符内容

创建Content控件后,向这些控件添加文本和控件。

在内容页中,Content控件外的任何内容(除服务器代码的脚本块外)都将导致错误。

在ASP.NET页中所执行的所有任务都可以在内容页中执行。

例如,可以使用服务器控件和数据库查询或其他动态机制来生成Content控件的内容。

内容页可能看起来与下面类似。

VisualBasic

复制代码

<%@PageLanguage="VB"MasterPageFile="~/Master.master"Title="ContentPage1"%>

ContentID="Content1"ContentPlaceHolderID="Main"Runat="Server">

Maincontent.

Content>

ContentID="Content2"ContentPlaceHolderID="Footer"Runat="Server">

Footercontent.

content>

[C#]

复制代码

<%@PageLanguage="C#"MasterPageFile="~/Master.master"Title="ContentPage1"%>

ContentID="Content1"ContentPlaceHolderID="Main"Runat="Server">

Maincontent.

Content>

ContentID="Content2"ContentPlaceHolderID="Footer"Runat="Server">

Footercontent.

content>

@ Page指令将内容页绑定到特定的母版页,并为要合并到母版页中的页定义标题。

注意,内容页包含的所有标记都在Content控件中。

(母版页必须包含一个具有属性runat="server"的head元素,以便可以在运行时合并标题设置。

可以创建多个母版页来为站点的不同部分定义不同的布局,并可以为每个母版页创建一组不同的内容页。

母版页的优点

母版页提供了开发人员已通过传统方式创建的功能,这些传统方式包括重复复制现有代码、文本和控件元素;使用框架集;对通用元素使用包含文件;使用ASP.NET用户控件等。

母版页具有下面的优点:

∙使用母版页可以集中处理页的通用功能,以便可以只在一个位置上进行更新。

∙使用母版页可以方便地创建一组控件和代码,并将结果应用于一组页。

例如,可以在母版页上使用控件来创建一个应用于所有页的菜单。

∙通过允许控制占位符控件的呈现方式,母版页使您可以在细节上控制最终页的布局。

∙母版页提供一个对象模型,使用该对象模型可以从各个内容页自定义母版页。

母版页的运行时行为

在运行时,母版页是按照下面的步骤处理的:

1.用户通过键入内容页的URL来请求某页。

2.获取该页后,读取@ Page指令。

如果该指令引用一个母版页,则也读取该母版页。

如果这是第一次请求这两个页,则两个页都要进行编译。

3.包含更新的内容的母版页合并到内容页的控件树中。

4.各个Content控件的内容合并到母版页中相应的ContentPlaceHolder控件中。

5.浏览器中呈现得到的合并页。

下面的关系图对此过程进行了阐释。

运行时的母版页

从用户的角度来看,合并的主控和内容页是一个单独而离散的页。

该页的URL是内容页的URL。

从编程的角度来看,这两个页用作其各自控件的独立容器。

内容页用作母版页的容器。

但是,在内容页中可以从代码中引用公共母版页成员(如下一节中所述)。

注意,母版页成为了内容页的一部分。

实际上,母版页与用户控件的作用方式大致相同--作为内容页的一个子级并作为该页中的一个容器。

但是在这种情况下,母版页是所有呈现到浏览器中的服务器控件的容器。

合并的主控和内容页的控件树看起来类似于下面这样:

复制代码

Page

MasterPage

(Masterpagemarkupandcontrols)

ContentPlaceHolder

Contentpagemarkupandservercontrols

(Masterpagemarkupandcontrols)

ContentPlaceHolder

Contentpagemarkupandservercontrols

(Masterpagemarkupandcontrols)

此关系图是简化的;如果内容页不具有相应的Content控件,母版页也可能在ContentPlaceholder控件中具有标记和控件。

一般说来,此结构对如何构造页或编写页的程序无任何影响。

但是在某些情况下,如果在母版页上设置一个页范围的属性,则该属性可能会影响内容页的行为,这是因为母版页是页上控件的最近的父级。

例如,如果在内容页上将EnableViewState属性设置为true,而在母版页中将相同的属性设置为false,实际上会禁用视图状态,因为母版页上的设置具有优先权。

母版页和内容页路径

当请求某个内容页时,其内容与母版页合并,并且该页在内容页的上下文

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1