Pok*_*oku 5 templates ssi asp-classic
是否可以使用经典ASP构建某种母版页面而不使用框架或iframe
s?
我想知道是否有一种方法可以在主页面中包含内容页面,就像ASP.NET母版页一样.根据我的研究,ASP Classic确实支持将其他ASP/HTML页面包含到页面中,但是这个值include
意味着该函数不能是动态的.
Mat*_*ves 12
你可以创建函数(比如一个Header()
函数和一个Footer()
函数),除了输出一些标记之外什么都不做.这些函数也可以采用参数,并有条件地调用.它与Master页面不完全相同,但听起来它完成了你想要做的事情.你会<!--#include file="headerfooter.asp"-->
在每个页面上都有一个,每个页面都会调用Header()
&Footer()
.
或者您也可以<!--#include file="header.asp"-->
在<!--#include file="footer.asp"-->
每个页面的顶部和底部使用.我见过这两种方法.
如果您正在寻找相反的方法,即单个模板页面在其"中间"部分调用单个页面,那么这不是您可以使用ASP经典轻松完成的事情.这是方法的根本区别:ASP.NET有控制树,事件等概念,而ASP Classic本质上只是一个从上到下运行的脚本.
这个想法来自Classic ASP Master Pages | 无神的守则.我在该页面上的图像中转录了代码,稍微扩展了它的例子,并探讨了这种技术的局限性.
这个想法是每个页面只有一个服务器端包含(一个<!--#include file="" -->
调用).单个包含是一个主模板文件,您可以命名master.asp
.母版页在每个页面上调用自定义子例程来代替每个内容区域.每个子页面都定义了这些子例程Sub
,其内容对于该子页面是唯一的.
master.asp
<!DOCTYPE html>
<html>
<head>
<title><% Title() %></title>
</head>
<body>
<% BodyContent() %>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
aboutUs.asp
<!--#include file="master.asp" -->
<% Sub Title %> About Us <% End Sub %>
<% Sub BodyContent %>
<h1>About Us</h1>
<p>
We do things!
</p>
<% End Sub %>
Run Code Online (Sandbox Code Playgroud)
当您aboutUs.asp
在IIS服务器上访问时,这将转变为此HTML :
<!DOCTYPE html>
<html>
<head>
<title> About Us </title>
</head>
<body>
<h1>About Us</h1>
<p>
We do things!
</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
但是,这种方法不允许嵌套:
subtemplate.asp
<div class="innerLogo <% LogoSide() %>">
<% LogoImg() %>
</div>
Run Code Online (Sandbox Code Playgroud)
template_user.asp
<!--#include file="master.asp" -->
<% Sub Title %> Our Logo <% End Sub %>
<% Sub BodyContent %>
<!--#include file="subtemplate.asp" -->
<% Sub LogoSide %> leftside <% End Sub %>
<% Sub LogoImg %>
<img src="img/about.png" alt="About" />
<% End Sub %>
<% End Sub %>
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为嵌套的Sub
s是语法错误:
Microsoft VBScript编译错误'800a03ea'
语法错误
/template_user.asp,第9行
Run Code Online (Sandbox Code Playgroud)Sub LogoSide ^
由于不允许嵌套,因此该模板系统实际上是一次性解决方案.如果您的单个页面的子程序变得太笨重,则无法再次使用此技术.因此,在使用此技术时,您应该仔细选择在哪里创建模板集,以便在灵活性和干燥性之间提供最佳平衡.