ASP程序员经常面临的最大挑战之一是动态Include文件。由于#include 在ASP代码执行之前处理,所以,看起来,动if/else的脑筋是不可能的。
真是这样吗?
根据你使用Include的目的,以及你将Include的文件数目,使用if/else也许可以解决问题。但这绝对不是任何时候可以奏效的,而且也不是一种有效的解决办法,因为你需要做许多的手工工作。
假设有两个样本HTM文件,1.htm和2.htm,为简化起见,假设文件的内容如下:
$#@60;!-- 1.HTM: --$#@62;
$#@60;font color=#ff0000$#@62;This is 1.htm$#@60;/font$#@62;
$#@60;!-- 2.HTM: --$#@62;
$#@60;font color=#0000ff$#@62;This is 2.htm$#@60;/font$#@62;
现在我们来试试动态Include:
$#@60;%
if request.querystring(‘param‘)=‘2’ then
%$#@62;
$#@60;!--#include file=‘2.htm’--$#@62;
$#@60;%
else
%$#@62;
$#@60;!--#include file=‘1.htm’--$#@62;
$#@60;%
end if
%$#@62;
请注意:上面的两个#include 实际上都得到了处理。你可以实际运行一下,看看效果:
http://localhost/Test.asp?param=1
http://localhost/Test.asp?param=2
http://localhost/Test.asp
上面我们是把一个querystring作为条件。你还可以把时间、日期、浏览器版本等作为条件。但是,条件越复杂,这种方法的效率越差。下面提供了另外一种思路:
$#@60;%
if request(‘param‘)=‘2’ then
filespec = ‘2.htm’
else
filespec = ‘1.htm’
end if
filespec = server.mapPath(filespec)
scr = ‘scripting.fileSystemObject’
set fs = server.createobject(scr)
set f = fs.openTextFile(filespec)
content = f.readall
set f = nothing
set fs = nothing
response.write(content)
%$#@62;
在IIS5.0/ASP3.0中,有两种新的方法来支持“动态包含”:
$#@60;%
server.transfer filename
server.execute filename
%$#@62;
如果正好使用的是IIS5.0和ASP3.0,那么Ok! 但是IIS5.0需要运行在Windows 2000上。