相当于ASP中的主页面经典

是否可以使用经典ASP 而不是框架或iframe s构建某种主页面?相当于ASP中的主页面经典

我想知道是否有办法在主页面中包含内容页面,如ASP.NET master pages。从我研究的内容来看,ASP Classic确实支持将其他ASP/HTML页面包含到页面中,但放入此include的值意味着该功能不能动态。

回答:

您可以创建函数(例如,一个Header()函数和一个Footer()函数),它们什么也不做,只是输出一些标记。这些函数也可以带参数,并有条件地调用。它与Master页面不太一样,但它听起来像是完成了你想要做的事情。每个页面上都有一个<!--#include file="headerfooter.asp"-->,每个页面都会调用Header() & Footer()

或者您也可以在顶部使用<!--#include file="header.asp"-->,在每个页面底部使用<!--#include file="footer.asp"-->。我见过两种方法。

如果你正在寻找的反向,即,它调用单独的页面,在它的一个模板页“中间”部分,那么这是不是真的东西,你可以用ASP经典很容易做到。这是一种基本的差异:ASP.NET有一个控制树,事件等概念,而ASP Classic本质上只是一个从上到下的脚本。

回答:

一个在传统的ASP中最丑的一个问题是,#includes经常发生,所以把两个在if包括 - then - else结构总是包括 - 即使你只看到适用于您的条件值输出。

即使包括工作,他们不给你,你真正需要的,其结果是选择“对飞”的模板或皮肤。处理这种情况

的一种方法是使用模板引擎如KudzuASP,胜过传统#include方法。这是一个很简单的例子:

<!-- An HTML Template --> 

<html>

<head><title><!--[Replace|PageTitle]-->PageTitle<!--[/Replace]--></title></head>

<body>

<table border="1" cellpadding="4" callspacing="2" width="640">

<tr>

<td colspan="2"><!--[HeaderContent/]--></td>

</tr>

<tr>

<td width="160"><!--[LeftColumnContent/]--></td>

<td><!--[MainContent/]--></td>

</tr>

<tr>

<td colspan="2"><!--[FooterContent/]--></td>

</tr>

</table>

</body>

</html>

而ASP代码如下所示:

<%@ Language=VBScript %> 

<!-- #include file="./KudzuASP/_kudzu.asp" -->

<%

Dim PageTitle : PageTitle = "This is a Master Page"

'

' Create the template engine

'

Dim T_ENGINE

Set T_ENGINE = New CTemplateEngine

T_ENGINE.PutValue "PageTemplate", PageTemplate

T_ENGINE.SetHandler "HeaderContent", New CTXHeaderContent

T_ENGINE.SetHandler "LeftColumnContent", New CTXLeftColumnContent

T_ENGINE.SetHandler "MainContent", New CTXMainContent

T_ENGINE.SetHandler "FooterContent", New CTXFooterContent

'

' Custom Tage Handlers

'

Class CTXHeaderContent

Public Sub HandleTag(vNode)

vNode.Engine.ContentAppend "Header"

End Sub

End Class

Class CTXLeftColumnContent

Public Sub HandleTag(vNode)

vNode.Engine.ContentAppend "Left<br/>Content"

End Sub

End Class

Class CTXMainContent

Public Sub HandleTag(vNode)

vNode.Engine.ContentAppend "Main<br/>Content"

End Sub

End Class

Class CTXFooterContent

Public Sub HandleTag(vNode)

vNode.Engine.ContentAppend "Footer"

End Sub

End Class

'

' Evaluate the template

'

T_ENGINE.ParseFile Server.MapPath("./MasterPage.html")

T_ENGINE.EvalTemplate

%>

模板引擎使得在当适当的标签是托管ASP代码页定义您的自定义对象的调用处理。您的自定义类的函数成员可以直接访问托管页面及其变量和方法,以及模板引擎的对象层次结构。换句话说,模板在输出期间驱动输出和托管ASP页面。

由于模板引擎可以动态选择要在运行时处理的HTML模板,因此可以动态地包含使用内置<!--[import/]-->标记的自定义标记处理程序库。

更新2016年1月13日:我已经开源了这个项目,你可以找到维持在这个地址的最新代码:https://github.com/Mumpitz/KudzuASP

回答:

这个想法是从Classic ASP Master Pages | Godless Code。我转录在页面上的图像的代码中,扩展了其例子了一下,也探讨了这一技术的局限性。

这个想法是,每个页面只有一个服务器端包含(一个<!--#include file="" -->调用)。单个包含是一个主模板文件,您可以将其命名为master.asp。主页面调用每个页面上的自定义子例程来代替每个内容区域。每个子页面都定义了Sub这些子例程,其内容是该子页面的唯一内容。

master.asp

<!DOCTYPE html> 

<html>

<head>

<title><% Title() %></title>

</head>

<body>

<% BodyContent() %>

</body>

</html>

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 %>

也就是说,当你在IIS服务器上查看aboutUs.asp变成这个HTML:

<!DOCTYPE html> 

<html>

<head>

<title> About Us </title>

</head>

<body>

<h1>About Us</h1>

<p>

We do things!

</p>

</body>

</html>

然而,这种做法不允许嵌套:

subtemplate.asp

<div class="innerLogo <% LogoSide() %>"> 

<% LogoImg() %>

</div>

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 %>

这是行不通的,因为嵌套Sub s为一个语法错误:

Microsoft VBScript compilation error '800a03ea'

Syntax error

/template_user.asp, line 9

Sub LogoSide 

^

由于不允许嵌套,这个模板系统,实际上,一一次性解决方案。如果你的个别页面的子程序变得太笨重,你不能再使用这种技术。所以当使用这种技术时,您应该仔细选择在哪里开出一组模板,以便在灵活性和DRY之间提供最佳平衡。

回答:

我只是用html的Default.asp页面,然后把我的代码放在内容区域。

<%@ Language="VBScript" %> 

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="utf-8" />

</head>

<body>

<div id="topNav"> <!--begin top Nav-->

<ul>

<!--Be sure that all links are like this href="?page=contentPageEx"-->

<li><a href="?page=home">Home</a></li>

</ul>

</div> <!--end top Nav-->

<div id="content">

<%

Dim default

default= Request.QueryString

If default= "" Then

Server.execute "includes/home.html"

Else

Server.execute "includes/" & request("page") & ".html"

end if

%>

</div>

<div id="botNav"> <!--begin bot Nav-->

<ul>

<li><a href="?page=home">Home</a></li>

</ul>

</div> <!--end Bot Nav-->

</body>

</html>

然后我把我所有的内容放到一个包含html页面的文件中。

<!DOCTYPE html> 

<html lang="en">

<head>

<meta charset="utf-8" />

<!--Search engines use this title ect...-->

<title>Hello SEO! This is a content page!</title>

<!--Can be styled independently-->

<style>

p {

color: #0094ff;

}

</style>

</head>

<body>

<p>Hello World!</p>

</body>

</html>

回答:

罗里写了在传统的ASP母版页一个很好的例子,但证明了“母版页”的方法有其局限性,因为替补不能嵌套。

但是,出于演示的目的,并且由于经典ASP中的JavaScript几乎没有任何Internet上的文档,下面是在ASP VBScript中失败的同一示例,但不会在ASP JavaScript中失败

master.asp

<!DOCTYPE html> 

<html>

<head>

<title><% Title() %></title>

</head>

<body>

<% BodyContent() %>

</body>

</html>

subtemplate.asp

<div class="innerLogo <% LogoSide() %>"> 

<% LogoImg() %>

</div>

template_user.asp

<%@ Language= "Javascript" %> 

<!--#include file="master.asp" -->

<% function Title() { %> About Us <% } %>

<% function BodyContent() { %>

<!--#include file="subtemplate.asp" -->

<% function LogoSide() { %> leftside <% } %>

<% function LogoImg() { %>

<img src="img/about.png" alt="About" />

<% } %>

<% } %>

它的工作原理!这里是多汁的结果:

<!DOCTYPE html> 

<html>

<head>

<title> About Us </title>

</head>

<body>

<div class="innerLogo leftside ">

<img src="img/about.png" alt="About" />

</div>

</body>

</html>

记住,JavaScript,甚至ECMAScript的第3版在传统的ASP,往往是比那被青睐,微软大力推广VBScript引擎更强大和表现力。如果您必须使用经典ASP,请使用JavaScript!

以上是 相当于ASP中的主页面经典 的全部内容, 来源链接: utcz.com/qa/262002.html

回到顶部