母版页运行机制:

用户通过输入内容也的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. 利用border-radious画图形

    今天才发现,border-radius可以画很多图形,下面跟我来看一下吧: 在设有宽和高的情况下画一个圆: #div1{ /*宽高相等,圆角范围为高或宽的一半或以上*/ background-colo ...

  2. android assets文件夹浅谈

    ---恢复内容开始--- 最近在研究assets文件夹的一些属性跟使用方法.根据网上一些文章.实例做一下汇总,拿出来跟大家分享下,有不足的地方还请多多指教. 首先了解一下assets是干什么用的,as ...

  3. MVC之路随记3--Html辅助方法

    概述:MVC中使用@Html.MethodName 来做很多Html的事情,简化了开发工程量,使用方便,并且易于理解 详细方法: 1.表单 <form action="/Home/Se ...

  4. Java源码分析系列

    1) 深入Java集合学习系列:HashMap的实现原理 2) 深入Java集合学习系列:LinkedHashMap的实现原理 3) 深入Java集合学习系列:HashSet的实现原理 4) 深入Ja ...

  5. ASIHTTPRequest中数据压缩问题与gzip

    出现了类似问题,先mark,以后修改 最近使用asi发现,部分网络回调数据不能正常的json解析,将responseHeaders头打印出来,才发现公司服务器部分数据添加了gzip压缩传输. 最近简单 ...

  6. C#数组全解

    数组概述 C# 数组从零开始建立索引,即数组索引从零开始.C# 中数组的工作方式与在大多数其他流行语言中的工作方式类似.但还有一些差异应引起注意. 声明数组时,方括号 ([]) 必须跟在类型后面,而不 ...

  7. IE8下ajax请求失败的解决方案

    今天发现IE9以下的浏览器,ajax请求返回数据异常研究半天发现是type参数未设置,由于默认方式是Get,添加上type:“post”就恢复正常了

  8. svn/git的diff、patch

    svn/git的diff.patch 前几天,正当我突突的写代码,企业微信嘀嘀一声响”在不,过来帮我看个bug”.本人一向助人为乐,高兴的冲了过去,然后就开始了一段长达1分钟的问题描述.很明显,此同学 ...

  9. UIkit折腾

    镜像命令: sudo npm install --registry=http://registry.npm.taobao.org/ --disturl=https://npm.taobao.org/d ...

  10. C#基础——静态成员,static关键字

    当声明一个类成员为静态时,意味着无论创建多少个类的对象,只会有一个该静态成员的副本. 关键字static意味着只有一个该成员的实例.静态变量用于定义常量,因为它们的值可以通过直接调用类而不需要创建类的 ...