• .NET 2005 使用MasterPages实现Web窗体模板


    使用MasterPages实现Web窗体模板

    如果你是一个网页开发人员,面对大量含有重复内容的页面,你一定希望能利用“模板”定义网页内的公共部分,而每一个页面只需要完成其特有的内容,通过模板生成最终的页面。

    熟悉Dreamweaver的网页开发人员都会喜欢其中的模板(Template)功能。但是当我们转换到了ASP.NET平台,却不得不使用一个基本上只能算是文本编辑器的微软开发环境(当然这应该是一个最完美的文本编辑器),微软在图形化网页设计方面也只能算是一个门外汉。尽管如此,即使没有所见即所得的图形化设计界面,微软以及其他开源志士们还是为我们提供了丰富的Web窗体前端控件。其中的MasterPages可以说是最有用的,因为它实现了Dreamweaver中的模板功能,而且在ASP.NET框架的支持下,使用模板变得更简便,我们甚至可以编程为自己的模板添加许多功能。

    使用MasterPages实现Web窗体模板

    定义模板控件

    如果我们的窗体布局分为上中下三部分,而中间的部分是特定内容区域,那么最终的模板内容可以像下面这样:

    <%@ Register TagPrefix="mp" namespace="Microsoft.Web.Samples.MasterPages" assembly="MasterPages" %>
    <html>
        <body>
            <FORM runat="server">
                <TABLE width="100%" border=1>
                    <TR><TD>页眉</TD></TR>
                    <TR><TD><mp:region id="regContent" runat="server">窗体内容</mp:region></TD></TR>
                    <TR><TD>页脚</TD></TR>
                </TABLE>
            </FORM>
        </body>
    </html>

    1、每一个MasterPage的模板都是一个用户控件UserControl,在Visual Studio .NET环境中可以通过“项目->添加->Web用户控件”为项目新增一个UserControl。这个例子的用户控件我取名叫"Template.ascx",放在Web项目的根路径下。

    2、在UserControl的HTML源代码的头部有这样一行:
    <%@ Register TagPrefix="mp" namespace="Microsoft.Web.Samples.MasterPages" assembly="MasterPages" %>
    这是为页面注册一个自定义的Tab标签,有了这个标签,才能使用MasterPages提供的各种控件。

    3、为模板设计窗体的公共部分,这些内容和普通的HTML页面、ASP.NET Web窗体没有任何区别,如果你的网页使用了其他UserControl,而这些UserControl也是公共的,那么同样可以在这个模板内添加。总之,写一个模板控件与设计一个Web窗体没有什么区别,我们所要做的,仅仅是保留窗体内的公共内容,除去特定内容。

    4、在Web窗体内特定内容的位置,使用控件标记代替。在以上这个例子中,regContent就是窗体特定内容的区域,每一个窗体将在这里填入自己的内容。

    在窗体内使用模板

    如果使用刚才给出的模板示例,窗体的HTML源代码如下:

    <%@ language="c#" debug="true" trace="false" %>
    <%@ Register TagPrefix="mp" namespace="Microsoft.Web.Samples.MasterPages" assembly="MasterPages" %>
    <mp:contentcontainer runat="server" MasterPageFile="~/Template.ascx" id="Test">
        <mp:content id="regContent" runat="server">窗体内容测试</mp:content>
    </mp:contentcontainer>

    1、和模板控件一样,使用MasterPages之前必须先注册其Tag(代码头部的第二行)。

    2、在窗体内添加一个mp:contentcontainer的控件,上面的例子里它有三个属性:
    runat="server"——这个是所有Web控件必须具备的属性;
    MasterPageFile="~/Template.ascx"——告诉contentcontainer控件,此窗体使用的模板控件为Web根路径下的Template.ascx文件;
    id="Test"——这个属性并不是必须的,但是如果没有或者在所有使用这个模板的窗体内此id有重复,在窗体的设计界面中我们将无法看见窗体的可视化结果,而仅仅显示一个contentcontainer控件标记。

    3、在之间加入,也就是窗体自身的内容,它的id必须和模板中定义的region对应。在以上这个例子中,只有一个content——regContent——它对应了模板中id为regContent的region。

    现在,模板和窗体都可以正常工作了。它们生成的结果就等同于这样一个窗体:

    <%@ language="c#" debug="true" trace="false" %>
    <html>
        <body>
            <FORM runat="server">
                <TABLE width="100%" border=1>
                    <TR><TD>页眉</TD></TR>
                    <TR><TD>窗体内容测试</TD></TR>
                    <TR><TD>页脚</TD></TR>
                </TABLE>
            </FORM>
        </body>
    </html>


    在“MasterPages实用技巧”的下一篇里,你可以了解基于MasterPages的模板前端控制技巧。

  • 相关阅读:
    2014 中华架构师大会 回想
    mybatis重拾---部署官方demo
    D 语言学习感受
    D语言学习
    D语言简介
    C++输入cin详解
    C++源文件的后缀名问题
    C 函数指针详解
    Linux下的五个查找命令:grep、find、locate、whereis、which
    Qt---QFtp上传、下载二进制文件
  • 原文地址:https://www.cnblogs.com/llbofchina/p/425956.html
Copyright © 2020-2023  润新知