相当于ASP Classic中的母版页

Pok*_*oku 5 templates ssi asp-classic

是否可以使用经典ASP构建某种母版页面而不使用框架或iframes?

我想知道是否有一种方法可以在主页面中包含内容页面,就像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本质上只是一个从上到下运行的脚本.


Ror*_*ane 7

这个想法来自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)

这不起作用,因为嵌套的Subs是语法错误:

Microsoft VBScript编译错误'800a03ea'

语法错误

/template_user.asp,第9行

Sub LogoSide
^
Run Code Online (Sandbox Code Playgroud)

由于不允许嵌套,因此该模板系统实际上是一次性解决方案.如果您的单个页面的子程序变得太笨重,则无法再次使用此技术.因此,在使用此技术时,您应该仔细选择在哪里创建模板集,以便在灵活性和干燥性之间提供最佳平衡.