背景:每个网页的基本框架结构类似:

浏览网站的时候会发现,好多网站中,每个网页的基本框架都是一样的,比如,最上面都是网站的标题,中间是内容,最下面是网站的版权、开发提供商等信息:

在这些网页中,表头、底部的样式和内容都是一样的,不同的只是中间的内容。

因此在制作网站时,可以将这些共同的东西分离出来,放到“窗体母版页”中,在需要的时候嵌套就可以。

巧用窗体母版项:

下面就开始行动(本文是以VisualStudio2013作为编程环境,可能在某些步骤与其他版本有所出入,请自行注意):

1、在项目中添加一Web窗体母版页test.Master:右键项目—添加—新建项—Web窗体母版页;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="test.master.cs" Inherits="Web.test1" %>
 
 
 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title></title>
    <asp:ContentPlaceHolder ID="head" runat="server">
     
 
 
    <form id="form1" runat="server">
    <div>
         
         
        </asp:contentplaceholder>
    </div>
    </form>
 
<!--html>

2、在窗体母版页test.Master的标记之间添加CSS、JS等引用(这里先只添加CSS文件为例):

1
2
3
4
5
<link href="css/common.css" rel="stylesheet">    <%--添加引用CSS文件--%>     
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title></title>
 
</asp:contentplaceholder>

3、编辑窗体母版页test.Master,添加每个网页的公共内容(此处以网页布局为上图的布局为例,三个div的css样式就暂不说明):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<form id="form1" runat="server">
    <div id="top">                                 <%--每个网页的公共样式:网页头部--%>
        <h1>某某某网站</h1>
    </div>
         
    <div id="main">                                <%--每个网页的不同样式:网页主体内容--%>
         
             <%--此处为每个嵌套此母版的各个网页的不同内容--%>
        </asp:contentplaceholder>
    </div>    
 
    <div id="footer">                              <%--每个网页的公共样式:网页版权信息区--%>
        <p>版权所有:******</p>
    </div>
</form>

4、在每个网页中嵌套窗体母版页test.Master:右键项目—添加—新建项—包含母版页的Web窗体test.aspx,在选择母版页对话框中选择test.Master,确定,生成的网页为:

1
2
3
4
5
<%@ Page Title="\" Language="C#" MasterPageFile="~/common.Master" AutoEventWireup="true" CodeBehind="test2.aspx.cs" Inherits="Web.test2" %>
 
</asp:content>
 
</asp:content>

此时这个窗体test.aspx和母版页test.Master的运行效果是一样的,接下来就是加上每个网页中的不同的内容。

5、此时,网页test.aspx中ContentPlaceHolderID=“head”和ContentPlaceHolderID=“contentPlaceHolder”的就相当于母版页test.Master中对应的。所以假如每个网页都会有相同部分,就可以把相同部分写在母版页的相应位置,而将每个网页的不同内容写在ContentPlaceHolderID=“contentPlaceHolder”的中。

比如,第4步中,这个test.aspx已经嵌套了这个样式,它的主题内容为 “ 网站内容 网站内容 网站内容 网站内容…… ”,则test.aspx中的代码为:

1
2
3
4
5
6
<%@ Page Title="\" Language="C#" MasterPageFile="~/common.Master" AutoEventWireup="true" CodeBehind="test2.aspx.cs" Inherits="Web.test2" %>
 
</asp:content>
 
    <p>网站内容 网站内容 网站内容 网站内容…… </p>
</asp:content>

假如我又建了一个名为test1.aspx的网页,除了与test1.aspx中的主体内容不一样之外,其他都一样,那么就可以让test1.aspx嵌套母版页test.Master,代码为:

1
2
3
4
5
6
<%@ Page Title="\" Language="C#" MasterPageFile="~/common.Master" AutoEventWireup="true" CodeBehind="test2.aspx.cs" Inherits="Web.test2" %>
 
</asp:content>
 
    <p>网站内容1 网站内容1 网站内容1 网站内容1…… </p>
</asp:content>

拓展:母版页嵌套母版页

当整个网站内的所有网页并不是这一种样式,而是一个大的网站分为几个栏目,每个栏目中网页的风格样式统一,这时候可以用母版页来嵌套母版页 :

现在再建立一个母版页(我在这里给它取名为“子母版页”),用它来嵌套上面的母版页test.Master,代码为:

1
2
3
4
5
6
7
8
9
10
11
<%@ Master Language="C#" MasterPageFile="~/test.Master" AutoEventWireup="true" CodeBehind="m_common.master.cs" Inherits="Web.admin.m_common" %>
 
 
     
</asp:content>
 
     
     
         <%--此处为嵌套“子母版页”的各个网页的不同内容--%>
    </asp:contentplaceholder>
</asp:content>

注意,代码第一行的MasterPageFile=“~/test.Master”即要嵌套的母版页的地址,“~”为当前目录。

嵌套网页母版项的好处:

可以利用VisualStudio中的窗体母版页来将每个页面中相同的部分进行封装,在创建相同结构的网页时,便可以直接嵌套这个窗体母版页,避免了代码的重复,提高了代码的复用性;另外,如果要修改一个栏目甚至整个网站的风格,则只需修改母版页以及母版页中引入的<script>等文件,提高了代码的可维护性,充分体现了OOP的思想。

ASP.Net巧用窗体母版页的更多相关文章

  1. ASP.NET中 WebForm 窗体控件使用及总结【转】

    原文链接:http://www.cnblogs.com/ylbtech/archive/2013/03/06/2944675.html ASP.NET中 WebForm 窗体控件使用及总结. 1.A, ...

  2. 《ASP.NET1200例》解决母版页报错“内容控件必须是内容页中的顶级控件,或是引用母版页的嵌套母版页。”

    VS2005下,添加了母版页这个控件,我们可以讲N个页面中共同的部分放在母版页来实现,并让WEB窗体集成自我们的母版页,就可以让我们的站点具有统一的风格了.在VS2005SP1之前的版本中,我们只能创 ...

  3. ASP.NET MVC:窗体身份验证及角色权限管理示例

    ASP.NET MVC 建立 ASP.NET 基础之上,很多 ASP.NET 的特性(如窗体身份验证.成员资格)在 MVC 中可以直接使用.本文旨在提供可参考的代码,不会涉及这方面太多理论的知识. 本 ...

  4. 20150813 Asp.net 关闭子窗体 刷新Tree控件

    主窗体************************************************************************************ using System ...

  5. [转载].NET ASP.NET 中web窗体(.aspx)利用ajax实现局部刷新

    之前开发的一套系统中用到了大量的 checkboxList 控件,但是每次选定之后都会刷新整个页面,用户体验很差,百度了之后查到这篇文章,尝试了一下可以实现,所以转载了过来,记录一下,也给其他有相同困 ...

  6. asp.net 关闭子窗体 刷新主窗体

    主窗体************************************************************************************ //原窗口保留,以对话框 ...

  7. MapXtrem + Asp.net 地图随窗体改变大小

    在B/S框架下,MapXtreme都是基于图片的,也就是说在客户端显示的地图实际上都是一张图片. 地图控件 <cc1:MapControl ID="/> 在调试模式下,编译后的地 ...

  8. asp.net页如何获取母版页控件

    获取母版页的相关内容有两种方法 1 通过findcontrol找控件ID需要在此事件中~因为Page_load中时是先内容页加载然后才是母版页加载 protected void Page_LoadCo ...

  9. Winform巧用窗体设计完成弹窗数值绑定-以重命名弹窗为例

    场景 在WIinform中有一种场景就是对文件进行重命名时需要获取原来的名字并填充窗体中的输入框, 然后在点击保存时还要能获取弹窗中输入框的内容. 比如点击重命名时弹窗 点击确认时获取输入框内容. 注 ...

随机推荐

  1. Python3.7 + jupyter安装(CentOS6.5)

    Python3.7 + jupyter安装(CentOS6.5) 方法一(anaconda): anaconda是一个开源的Python发行版本 包含conda,python等大量的科学包以及依赖 优 ...

  2. Android Studio发布Release版本之坑--Unknown host 'd29vzk4ow07wi7.cloudfront.net'

    使用Android Studio发布Release版本时,出现Unknown host 'd29vzk4ow07wi7.cloudfront.net'...错误. 解决方法:修改本机的DNS为8.8. ...

  3. C++ 派生类成员的访问属性

    派生类成员的访问属性: C++继承方式总共分为以下几种:public.private.protected三种(它们直接影响到派生类的成员.及其对象对基类成员访问的规则).(1)public(公有继承) ...

  4. YISMILE微信小程序使用说明

    使用说明: 程序名称:易校(YISMILE) 开发团队:KNY三人组 团队logo: 程序logo: 程序功能及使用说明: “失物招领”界面可以浏览发布的失物信息: “发布信息”界面用户可以针对物品类 ...

  5. 第二个Spring冲刺周期团队进展报告

    第一天:找识别不了的原因 第二天:继续找识别不了的原因 第三天:找文字库,找到tessdata语言包,放到手机SD卡根目录 第四天:了解OCR引擎 第五天:将导入tess-two导入到项目中,并进行测 ...

  6. Mac OS X使用简介

    一.OS X 版本以大型猫科动物命名 10.0   猎豹(Cheetah) 10.1   美洲狮(Puma) 10.2   美洲虎(Jaguar) 10.3   黑豹(Panther) 10.4   ...

  7. 操作系统学习(一)、80x86保护模式内存管理

    整理的不好,凑合着看吧 目录 1.内存及寻址 2.地址变换 3.分段机制 4.分页机制 5.保护 6.去到底部 一.内存及寻址 返回目录 二.地址变换 80X86 从 逻辑地址 到 物理地址 的转换: ...

  8. webpack 搭建vue项目流程

    1.安装node 2.打开命令行输入  npm install -g vue-cli 3.vue init webpack-simple vue 4.各种确认(enter键) 5.npm instal ...

  9. Java微信二次开发(二)

    第二天,做微信文本消息接口请求与发送 需要导入库:dom4j-1.6.1.jar,xstream-1.3.1.jar 第一步:新建包com.wtz.message.response,新建类BaseMe ...

  10. Java 策略模式(Strategy)

    创建一个能够根据所传递的参数对象的不同而具有不同行为的方法 要执行的算法固定不变,封装到一个类(Context)中 策略就是传递进去的参数对象,它包含执行代码 策略接口 /** * 策略接口 */ p ...