母版页运行机制:

用户通过输入内容也的URL来请求某个页面, 获取该页面后, 读取@Page指令, 如果该指令引用了一个母版页, 则也读取该母版页, 如果也是第一次请求这两个页面, 则母版页和被请求的页面都要进行编译; 包含更新的内容的母版页合并到内容页的控件树中, 各个Content控件的内容合并到模板页中相应的ContentPlaceHolder控件中, 浏览器中呈现得到的合并页;

母版页的优点:

使用母版页, 可以为ASP.NET应用程序页面创建一个通用的外观, 开发人员可以利用母版页创建一个单页布局, 然后将其应用到多个内容页中.母版页具有下面的优点:

使用母版页可以集中处理页的通用功能, 以便只在一个位置上运行更新, 在很大程度上提高了工作效率. 使用母版页可以方便的创建一组公共控件和代码, 并将其应用于网站中所有引用该母版页的网页. 可以通过控制母版页中占位符ContentPlaceHolder, 对网页进行布局; 由内容页和母版页组成的对象模型, 能够为应用程序提供一种高效, 易用的实现方式, 并且这种对象模型的执行效率比以前的处理方式有了很大的提高.

1. 创建母版页:

母版页是页面的公共部分, 因此, 在创建母版页时, 必须判断哪些内容是页面的公共部分.

a)       网站的解决方案下, 右击网站名, 在弹出的快捷菜单中选择”添加新项”命令

b)       选择母版页, 这样就创建了一个母版页

2. 创建内容页

   还是右键单击网站名称, 在弹出的快捷菜单中选中 添加新项 , 在打开的 对话框中,      选择web窗体, 勾选将代码放在单独的文件中和选择母版页框, 单击添加按钮, 在下一个弹出的窗口中选择一个母版页, 然后单击确定

3. 设置母版页应用范围:

a)         ASP.NET中将内容页附加到母版页提供了3种级别(应用范围)

  i.页面级

可以在每一个内容也中使用Page指令将内容页绑定到一个母版页, 代码如下:

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" MasterPageFile="~/MasterPage.master"%>

也可以通过编程方式, 动态应用母版页到某一个特定的内容页中: (手动敲入) override void

<%@ Page Language="C#" %>
<%@ MasterType TypeName="BaseMaster" %>
<script runat="server">
void Page_PreInit(Object sender, EventArgs e)
{
if (Request.QueryString["masterpage"] == "other")
{
this.MasterPageFile = "OtherMasterPage.master";
} else
{
this.MasterPageFile = " MasterPage.master";
}
this.Title = Master.TitleName;
}
</script> <asp:content id="Content1" contentplaceholderid="ContentPlaceHolder1" runat="server">
<p>&nbsp;</p>
<h1 align=center>
动态加载母版页
</h1>
<p>&nbsp;</p><p>&nbsp;</p>
</asp:content>

  ii.应用程序级:

通过再应用程序的配置文件Web.config的pages元素中进行设置, 可以指定应用程中的所有ASP.Net页面(aspx文件)都自动绑定一个母版页, web.config文件中做如下设置:

  <system.web>
<pages masterPageFile="MasterPage.master" />
</system.web>

  iii.文件夹级

这种方式和应用程序级的绑定类似, 不同的是只需要在一个文件夹中的一个Web.config文件中进行配置, 然后母版页绑定会应用于该文件夹中所有ASP.NET页, 而不会影响文件夹以外的页面.

4. 母版页的事件顺序:对于控件而言, 事件都是在本地处理的, 即内容页的控件在内容页中引发事件, 母版页中的空间在母版页中引发事件, 控件事件不会从内容页发送到母版页, 也不能在内容页中处理来自母版页控件的事件.在某些情况下, 内容页母版页会引发相同的事件, 两者都引发Init和Load事件, 引发事件的一般规则是初始化事件从最里面的控件向最外面的控件引发, 而所有其他事件则从最外面的控件向最里面的控件引发.

内容页的 Page_PreInit
母版页的 Page_Init
内容页的 Page_Init
内容页的 Page_InitComplete
内容页的 Page_PreLoad
内容页的 Page_Load
母版页的 Page_Load
母版页或内容页的
按钮点击等回发事件(Master或Content的Button事件不会同时触发)
内容页的 Page_LoadComplete
内容页的 Page_PreRender
母版页的 Page_PreRender
内容页的 Page_PreRenderComplete
内容页的 Page_SaveStateComplete
母版页的 Page_Unload
内容页的 Page_Unload

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

母版页前端代码:

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

<!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>
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<span style="font-family: 微软雅黑; font-size: small; font-weight: bold">访问母版页中的成员控件</span><br />
<asp:ListBox ID="ListBox1" runat="server" Width="150px">
<asp:ListItem Value="red">红色 </asp:ListItem>
<asp:ListItem Value="blue">蓝色</asp:ListItem>
<asp:ListItem Value="green">绿色</asp:ListItem>
<asp:ListItem Value="yellow">黄色</asp:ListItem>
<asp:ListItem Value="purple">紫色</asp:ListItem>
</asp:ListBox>
<div>
<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server"> </asp:ContentPlaceHolder>
</div>
</b></form>
</body>
</html>

内容页default.aspx代码:

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Title="无标题页" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
以下是内容页的控件<br />
<asp:DropDownList ID="DropDownList1" runat="server">
</asp:DropDownList>
</asp:Content>

内容页default.aspx.cs代码:

 protected void Page_LoadComplete(object sender, EventArgs e)
{
//在母版页中查询ID为ListBox1的ListBox控件
//将查询的值通过内容页中DropDownList控件显示出来。
//调用Master.FindControl
ListBox lb = Master.FindControl("ListBox1") as ListBox;
DropDownList1.Items.Clear();
foreach (ListItem li in lb.Items)
{
DropDownList1.Items.Add(li);
} }

最终效果:

041. asp.net中内容页访问母版页中的控件的更多相关文章

  1. WebForm中搭配母版页和用户控件页时候的事件加载顺序

    在生产环境中,一个内容页(aspx)可能会包含数个用户控件(ascx),而每个控件可能都会涉及到数据库访问. 如果在内容页.母版页.控件页中各自使用自己的数据库访问方法,会造成很大的运行成本. 这样的 ...

  2. 客户机中PLSQL DEV访问虚拟机中的ORCLE11g,错误百出!

    客户机中PLSQL DEV访问虚拟机中的ORCLE11g,错误百出! 创建时间: 2017/10/14 18:44 作者: CNSIMO 标签: ORACLE 忙了一下午,只有两个字形容:麻烦!   ...

  3. 网页中"IE限制网页访问脚本或ActiveX控件"的提示问题的解决方法

    以前从来没有注意过"IE限制网页访问脚本或ActiveX控件"的提示问题,对于这个小细节问题,虽然感觉很别扭,但一直没考虑解决方法,今天才发现该问题可以轻松解决,以下做个小小记录. ...

  4. ASP.NET中共有哪几种类型的控件?其中,HTML控件、HTML服务器控件和WEB服务器控件之间有什么区别

    ASP.NET的控件包括WEB服务器控件.WEB用户控件.WEB自定义控件.HTML服务器控件和HTML控件.HTML控件.HTML服务器控件和WEB服务器控件之间的区别如下所示.q      HTM ...

  5. ASP.NET 成员资格 Part.2(使用安全控件 Login)

    原文:ASP.NET 成员资格 Part.2(使用安全控件 Login)        准备好提供程序以及用户信息的存储,就可以开始构建验证用户.注册用户或者让用户能够重置密码的用户界面了.ASP.N ...

  6. MVC中使用HTML Helper类扩展HTML控件

    文章摘自:http://www.cnblogs.com/zhangziqiu/archive/2009/03/18/1415005.html MVC在view页面,经常需要用到很多封装好的HTML控件 ...

  7. ASP.NET自定义控件组件开发 第五章 模板控件开发

    原文:ASP.NET自定义控件组件开发 第五章 模板控件开发 第五章 模板控件开发 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开发 第一章 第二篇 接 ...

  8. ASP.NET自定义控件组件开发 第三章 为控件添加事件 前篇

    原文:ASP.NET自定义控件组件开发 第三章 为控件添加事件 前篇 第三章 为控件添加事件 好了,我们之前以前开发一个控件.而且也添加了属性,开发也很规范,但是那个控件还差最后一点:添加事件. 系列 ...

  9. ASP.NET自定义控件组件开发 第三章 为控件添加事件 后篇

    原文:ASP.NET自定义控件组件开发 第三章 为控件添加事件 后篇 第三章 为控件添加事件 后篇 前一篇文章只是简单的说了下事件,但是大家应该方法,在ASP.NET自定义控件中只是简单那么定义事件是 ...

随机推荐

  1. “-webkit-appearance: none”按钮样式作用!

    -webkit-appearance: none,可以去除浏览器默认样式.

  2. software_testing_work2_question1(改)_edition

    由于上个版本问题多多,而且测试情况略有呵呵,于是想想还是默默的改进了一个版本. input类 首先呢,是作为输入项的实体类input. 对比之前的版本,新版本(姑且称其为edition2)加强了ope ...

  3. HttpContext详解

    HttpContext 类:封装有关个别 HTTP 请求的所有 HTTP 特定的信息. 在处理请求执行链的各个阶段中,会有一个对象在各个对象之间进行传递,也即会保存 请求的上下文信息,这个对象就是Ht ...

  4. iOS 打电话 发短信(转载)

    官方代码 发短息和邮件添加MessageUI.framework 库 发送信息 - (IBAction)showSMSPicker:(id)sender { // You must check tha ...

  5. Mark Down绘图语法

    以下语法在网易云笔记中测试通过. 绘图的标志位是三个单引号```  开始  ``` 结尾 ,注意是英文半角的单引号,以下的字符也是英文半角状态下的才正确. 搜狗输入法的要特别注意,记得把shift 切 ...

  6. 嵌入式(Embedded)Neo4j数据库访问方法

    应用中采用嵌入式Neo4j(Embedded Neo4j)数据库,插入数据后不知道如何访问.查询之后知道有Neoclipse这个可视化工具,最新版本是1.9.5.添加目录后报错: 应该是Neoclip ...

  7. JS函数输出圆的半径和面积

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. 转载《SimpleAdapter的参数说明》

    SimpleAdapter的参数说明 第一个参数 表示访问整个android应用程序接口,基本上所有的组件都需要 第二个参数表示生成一个Map(String ,Object)列表选项 第三个参数表示界 ...

  9. php中关于Map热点的运用

    给图像使用map标签,可以给图像的某个部分建立超连接 一般情况下用在图片上,如:<img src="Images/banner.gif" width="780&qu ...

  10. ubuntu更新命令点点滴滴

    ubuntu更新命令点点滴滴      一些非root的更新命令:              sudo: sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一 ...