• 6,VTemplate模板引擎的使用


    原文地址:https://www.cnblogs.com/kingthy/archive/2009/12/10/net-vtemplate-doc-5.html

    在做WebForm编程开发时用过MasterPage的同学,可能都对这东东情有独钟。今日在QQ群上,“家有萧萧”同学也提出了这样一个问题:VT支持MasterPage吗?

    答案肯定是“不支持”,因为VTemplate模板引擎不是用于WebForm上的(当然如果非要用也是可以的),所以不支持Asp.net中的MasterPage技术。但“不支持”并不等于“没有”这功能!

    方法一:

    换个角度思考一下,VT其实也是可以用<vt:output>标签来达到MasterPage功能效果的。

    回顾一下

    5.15、<vt:output>数据输出标签元素

    此标签可输出某个标签或文件的数据标签样例:

    <vt:output tagid="user" /> 
    <vt:output file="output.html" charset="gb2312" />

       
    标签中已定义的属性列表:

    名称 说明
    id 标签元素的Id,建议唯一但不强制。(可不定义)
    name 标签元素的名称。(可不定义)
    tagid 需要输出数据的其它标签元素Id。(可不定义) 
    注:如果未定义此属性则需要定义file属性
    file

    需要输出数据的文件,可以为绝对路径或相对路径。(可不定义)

    注:如果未定义此属性则需要定义tagid属性

    charset 读取文件时使用的编码。(可不定义)

    从上表可看出<vt:output>标签可以通过设置tagid属性输出其它标签的数据,所以我们可以用其来代替MasterPage中的ContentPlaceHolder控件。

    比如我们定义一个这样的“MasterPage”页面(masterpage_content.html):

    <vt:set var="MasterPage" value="1" remark="设置一个变量,用于标示是处于MasterPage页中" />
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
    <title> MasterPage 内容 </title>
    </head>
    <body>
    <a class="menu" href="http://www.cnblogs.com/%22>博客园</a> &nbsp;&nbsp;
    <a  class="menu" href="http://www.cnblogs.com/kingthy%22>我的博客</a>
    <hr />
    <!--vt[以下是输入子页面的数据内容]-->
    <vt:output tagid="PageContent" />
    <hr />
    <div align="center">&copy;版权所有 Kingthy</div>
    </body>
    </html>

    其中定义的MasterPage变量,可起开关作用!<vt:output>标签中的tagid就是子页面定义的内容标签。如果需要,可在MasterPage中定义多个<vt:output>标签,但注意tagid的定义。

    以下是一个调用“MasterPage”的示例页面代码:

    <vt:include file="masterpage_content.html" remark="导入MasterPage页面" />
    <vt:set var="MasterPage" value="0" remark="设置一个变量,用于标示当前不处于MasterPage页中" />
    <!--vt[根据MasterPage变量值来判断子页面的内容是否需要输出.这就限制了子页面的内容只在MasterPage页面中的output标签输出.]-->
    <vt:if id="PageContent" var="MasterPage" value="1">
    <!--vt[子页面的内容必须放在此if标签内]-->
    <vt:for from="1" to="9" index="i">
    <vt:for from="1" to="$i" index="j">
    <vt:expression var="r" args="i" args="j" expression="{0}*{1}" />{$:i}*{$:j}={$:r}&nbsp;&nbsp;&nbsp;&nbsp;
    </vt:for>
    <br />
    </vt:for>
    </vt:if>

    在上面模板中,先使用<vt:include>标签导入“MasterPage”页面内容,再调用<vt:set>标签设置MasterPage变量为“0“,这两个标签的顺序不能调反。这样做的原因是因为“VTemplate模版引擎”解析模版数据时是先上而下,当解析<vt:include>“MasterPage”页面中的<vt:output>标签,输出tagid=”PageContent”的标签(也就是那个<vt:if>标签)数据时,因为此时MasterPage变量是等于“1”,所以能执行

    <vt:if id="PageContent" var="MasterPage" value="1">

    这个条件标签里的内容。当执行完

    <vt:set var="MasterPage" value="0" />

    标签再执行

    <vt:if id="PageContent" var="MasterPage" value="1">

    这个条件标签时,因为条件已不符合,因此不会再次执行输出里面的数据。

    至此,VTemplate中的“MasterPage“功能就“模仿”出来了。

    注:如果“MasterPage“页面中有多个<vt:output>标签,则子页面中也只是拷贝多少个同样判断条件但不同id的<vt:if>标签)。

    注:具体示例代码请参考VTemplate.WebTester项目中的masterpage_test.ashx文件与模板

    方法二: Panel标签

    注:此标签是3.7版本里增加的标签

    定义模板页,如masterpage.html, 代码如下:

    <html>
    <head>
    <title> <vt:panel id="title" /> </title>
    <vt:panel id="head" />
    </head>
    <body>

    <vt:panel id="body" />

    </body>
    </html>

     在上面模板代码中定义了3个panel,也就是3个容器面板标签。

    其它页面调用此masterPage.html,示例如下:

    <vt:include file="masterpage.html" />

    <vt:panel container="title">测试页面</vt:panel>

    <vt:panel container="head">
    <meta name="Keywords" content="关键字">
    <meta name="Description" content="描述内容">
    </vt:panel>

    <vt:panel container="body">
    <h1>这是主体内容</h1>
    </vt:panel>

    上面模板里,第一步先使用include标签导入模板页面,后跟着3个数据面板标签。解析此模板内容后,将输出以下数据:

    <html>
    <head>
    <title>测试页面</title>
    <meta name="Keywords" content="关键字">
    <meta name="Description" content="描述内容">
    </head>
    <body>

    <h1>这是主体内容</h1>

    </body>
    </html>

    也即是数据面板标签里的内容会代替容器面板里的数据输出。并且数据面板标签可以根据需要增加或减少,并不限制要和MaterPage里的容器面板标签的数量一致!

  • 相关阅读:
    洛谷 P2590 [ZJOI2008]树的统计
    如何让文件夹隐藏起来,保护自己的隐私
    SharePoint入门——创建一个网站
    SharePoint 解决管理员密码修改后各种问题的来袭
    .NET创建一个即是可执行程序又是Windows服务的程序
    C#——WebApi 接口参数传参详解
    C#中对Web.Config、App.Config字符串加密与解密的方法
    邮件服务器常用地址和端口信息
    Unity3d 5.x搭载VS2013使用
    系统性能优化- Session丢失
  • 原文地址:https://www.cnblogs.com/yushuo/p/12912547.html
Copyright © 2020-2023  润新知