Одна из самых уродливых проблем классического ASP заключается в том, что #includes
всегда происходит, поэтому включение двух включений в конструкцию _2 _-_ 3 _-_ 4_ всегда включает и то, и другое, даже если вы видите только результат, относящийся к вашему условному значению.
Даже если они включают работу, они не дают вам результата, который вы действительно ищете, а именно выбора шаблона или скина «на лету».
Один из способов справиться с этой ситуацией - использовать механизм шаблонов, такой как 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.01.13: у меня есть открытый исходный код для этого проекта, и вы можете найти последний код, поддерживаемый по этому адресу: https://github.com/Mumpitz/KudzuASP
person
Andrew Friedl
schedule
04.05.2012
<%If true Then%> <!--#include file="A.asp"--> <%Else%> <!--#include file="B.asp"--> <%End If%>
- person Filburt   schedule 15.05.2010<!--#include header.asp-->
на самом деле были директивами. / facepalm. Microsoft снова получает приз за самую глупую концепцию кода ... - person Kristen Hammack   schedule 21.09.2016