|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
一、动态包含文件 本文假定读者已经认识HTML、ASP和ActiveX对象的使用。在这里,我们将使用FileSystemObject和TextStream对象实现“动态包含”功能,即实现动态的include指令。 通常我们所设想的动态包含是:用一个变量保存待包含文件的名字,然后把该变量传入include指令。相信我们之中的许多人都曾经想要在自己的ASP应用中使用动态包含的文件,但最终却发现服务器并不直接支持动态包含。 首先应该搞清晰下面的代码是无法实现动态包含的: <% \\\' 声明用来保存文件名字的变量 Dim MyFile ?? \\\' 在变量中保存包含文件的名字 MyFile = Request("SomeFileName") ?? \\\' 将保存有文件名字的变量传递给include指令 %> <!--#include file=<%=MyFile%>--> ?? 上面的代码之所以不能实现动态包含,是因为ASP对include指令的处理早于脚本代码。假如我们执行上述代码,系统将提示错误说找不到包含文件。 使用包含文件的动机之一是让它作为静态HTML内容的容器,然后通过include指令来引用这个文件。包含文件中的静态HTML通常不作改动,比如标准的页头和页脚。但有些时候我们却需要根据用户的输入或其他条件提供不同的内容。为了不至于为每一种可能的情形分别创建完整的页面,“动态包含”文件这一概念就出现了。然而,正如上面说明的,表面上看起来最为合理的实现方式其实是没有用的。 为了解决这个问题,我们可以用FileSystemObject对象读入目标包含文件并保存到字符串变量,然后将这个字符串变量插入到发送给客户浏览器的页面。下面这个getFileContents函数帮助实现这个处理过程,它读入参数中指定的文件,然后将其内容作为字符串返回。 <% ?? \\\' 把文件名字传递给函数 Function getFileContents(strIncludeFile) Dim objFSO Dim objText Dim strPage ?? \\\' 初始化FileSystemObject对象 Set objFSO = Server.CreateObject("Scripting.FileSystemObject") ?? \\\'打开文件并把它传递给TextStream对象(objText)。Server对象的 \\\'MapPath函数用于获得文件的物理路径 Set objText = objFSO.OpenTextFile(Server.MapPath(strIncludeFile)) ?? \\\'读取并以字符串形式返回文件内容 getFileContents = objText.ReadAll ?? objText.Close Set objText = Nothing Set objFSO = Nothing End Function %> 使用这个函数即可实现动态地包含文件。首先,我们读入主页面(即包含页面布局和所有静态内容的模板文件)并把它保存到字符串变量;然后再读入包含文件并保存为字符串变量;最后,把保存包含文件内容的变量插入到主页面的内容之中。 二、应用实例 首先我们来看一下模板文件。下面的代码包含了一个HTML注释“<!-- INCLUDE FILE HERE -->”,我们将用包含文件的内容来取代这个HTML注释。 <html> <body> <h2>欢迎到访!</h2> <table width="500" border="1"> <tr> <td> <!-- INCLUDE FILE HERE --> </td> </tr> </table> </body> </html> 下面再来看一下本例所用的几个包含文件。第一个包含文件是默认的包含文件。默认包含文件是一个表单,答应用户选择打开其他三个包含文件中的其中一个。注重这个表单没有指定“action”属性,这表示表单将提交给它自己(即重新打开dynamicin3.asp)。 <!-- BEGIN DEFAULT INCLUDE --> <form method="post"> <h3>请选择一个您希望打开的文件</h3> <p> <select id=cboFile name=cboFile> <option value="includefile1.inc">文件 #1</option> <option value="includefile2.inc">文件 #2</option> <option value="includefile3.inc">文件 #3</option> </select> <input type="submit" value="Submit"> </p> </form> <!-- END DEFAULT INCLUDE --> 为简朴计,其他三个包含文件的内容都很简朴: <!-- BEGIN INCLUDE FILE #1 --> <h2 style="color:red">文件 #1 </h2> <br> <a href="dynamicinc3.asp">返回默认页面</a> <!-- END INCLUDE FILE #1 --> ?? <!-- BEGIN INCLUDE FILE #2 --> <h2 style="color:green">文件 #2 </h2> <br> <a href="dynamicinc3.asp">返回默认页面</a> <!-- END INCLUDE FILE #2 --> ?? <!-- BEGIN INCLUDE FILE #3 --> <h2 style="color:blue">文件 #3 </h2> <br> <a href="dynamicinc3.asp">返回默认页面</a> <!-- END INCLUDE FILE #3 --> 下面是dynamicinc3.asp页面的代码及其说明。 <% \\\'------------------------------------------------------------- \\\'getFileContents函数放到ASP文件的最前面 \\\'------------------------------------------------------------- ?? \\\'声明存放主页面和包含文件内容的变量 Dim strMain, strInclude ?? \\\'读取主页面的内容并保存到strMain变量 strMain = getFileContents("maintemplate.inc") ?? \\\'检查cboFile选择框是否已经选择。如是,读取所要求的文件 \\\'否则,读取默认的包含文件 If Request.form("cboFile") = "" Then strInclude = getFileContents("includedefault.inc") Else strInclude = getFileContents(Request.form("cboFile")) End If ?? \\\'把合适的包含文件读入到变量strInclude之后 \\\'使用Replace函数将它插入到strMain文件 strMain = replace(strMain,"<!-- INCLUDE FILE HERE -->",strInclude) ?? \\\'将结果发送到客户端 Response.Write strMain ?? %> 本例能够正常运行,而且从效果上看达到了动态包含文件的目的。但它没有使用include指令,而是使用了FileSystemObject来替代。 运行这个例子,右击页面并查看源文件,可以发现页面中插入的是默认的包含文件。然后,从选择列表选择一个包含文件。提交表单重新装载页面之后,再查看页面的源文件,可以发现此时插入的是刚才选择的包含文件。 当我们想要分离页面的布局和它的内容时,这种技术是很有用的。我们可以创建描述网站布局的模板,再以包含文件形式制作网站的内容,最后使用ASP就可以方便地把两者结合起来! 返回类别: 教程 上一教程: 在ASP中操作HTTP报头方式分析 下一教程: ASP经典分页类 您可以阅读与"如何实现真正的动态包含"相关的教程: · 如何实现动态添加HTML文档中FORM项 · 如何实现网页在线人数统计 · 如何实现大小写完全匹配的查询 · ADO存取数据时如何实现留言记录的分页显示 · 案例:如何实现网上考试? |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |