8

我的意思是,像 php'h 包括...

就像是

my_file_to_be_included = "include_me.asp"

-->

就我目前所见,有几种选择,但每一种都有一些缺点......

我想弄清楚的是如何制作一个灵活的模板系统......而不必将整个东西静态地包含在一个带有loooooong case语句的文件中......

这里有几个链接

使用 FileSysmemObject 的解决方案,只允许您包含静态页面

同上

还有一个

adobe 中的相同内容

这种方法使用 Server.Execute

但它有一些我想避免的缺点......似乎(还没有尝试过)Server.Execute 代码在另一个上下文中运行,所以你不能用它来加载你计划在来电代码...讨厌...

一样

我觉得这个是一样的

这看起来很有希望!

我不确定(还不能测试它),但似乎这个 dinamycally 将页面处理到一个 SSDI 组件......

任何想法???

4

6 回答 6

7

不,您不能进行动态包含,期间。

你最好的方法是 server.execute 并通过 Session 变量传递它需要的任何状态:-

Session("callParams") = BuildMyParams() 'Creates some sort of string
Server.Execute(my_file_to_be_included)
Session.Contents.Remove("callParams")
于 2009-01-26T11:55:21.237 回答
2

改进版(v2.0):

<%
' **** Dynamic ASP include v.2.0

function fixInclude(content)
   out=""   
   if instr(content,"#include ")>0 then
        response.write "Error: include directive not permitted!"
        response.end
   end if     
   content=replace(content,"<"&"%=","<"&"%response.write ")   
   pos1=instr(content,"<%")
   pos2=instr(content,"%"& ">")
   if pos1>0 then
      before= mid(content,1,pos1-1)
      before=replace(before,"""","""""")
      before=replace(before,vbcrlf,""""&vbcrlf&"response.write vbcrlf&""")
      before=vbcrlf & "response.write """ & before & """" &vbcrlf
      middle= mid(content,pos1+2,(pos2-pos1-2))
      after=mid(content,pos2+2,len(content))
      out=before & middle & fixInclude(after)
   else
      content=replace(content,"""","""""")
      content=replace(content,vbcrlf,""""&vbcrlf&"response.write vbcrlf&""")
      out=vbcrlf & "response.write """ & content &""""
   end if
   fixInclude=out
end function

Function getMappedFileAsString(byVal strFilename)
  Dim fso,td
  Set fso = Server.CreateObject("Scripting.FilesystemObject")
  Set ts = fso.OpenTextFile(Server.MapPath(strFilename), 1)
  getMappedFileAsString = ts.ReadAll
  ts.close  
  Set ts = nothing
  Set fso = Nothing
End Function

execute (fixInclude(getMappedFileAsString("included.asp")))
%>
于 2011-07-19T17:25:20.573 回答
1

当然你可以做真正的经典 asp 动态包含。我前段时间写了这篇文章,它以一种全新的方式为我打开了 Classic ASP。它会完全按照您的要求做,即使人们似乎认为这是不可能的!

有什么问题就告诉我。

于 2009-06-17T19:38:50.440 回答
0

我对经典的 ASP 有点生疏,但我很确定您可以使用该Server.Execute方法读取另一个 asp 页面,然后继续执行调用页面。15Seconds 有一些关于它的基本知识 - 它让我回到了......

于 2009-01-26T11:57:31.747 回答
0

就像一个附加说明。我在使用动态包含的页面顶部收到了奇怪的 ASCII 字符,所以我发现使用 ADODB.Stream 对象来读取包含文件消除了这个问题。

所以我更新的 getMappedFileAsString 函数代码如下

Function getMappedFileAsString(byVal strFilename)
  Dim fso
  Set fso = CreateObject("ADODB.Stream")

  fso.CharSet = "utf-8"
  fso.Open
  fso.LoadFromFile(Server.MapPath(strFilename))

  getMappedFileAsString = fso.ReadText()

  'Response.write(getMappedFileAsString)
  'Response.End

  Set fso = Nothing
End Function
于 2013-06-07T18:22:29.980 回答
0

我正在建立一个网站,可以方便地使用动态包含。该站点全是 ajax(根本不重新加载页面),虽然纯数据 JSON 返回调用不需要它,但每个不同应用程序子部分(窗口/窗格/区域/表单等)的所有不同 html 内容在我看来最好是在不同的文件中。

我最初的想法是让 ajax 调用回到“中央集线器”主文件(首先启动应用程序),然后它会知道要包含哪个子文件。在我意识到每次调用一些可能很小的部分都必须解析整个站点的所有 ASP 代码之后,简单地包含所有文件是行不通的!并且使用 Execute 方法在速度和维护方面都不好。

我通过将假定的“子”页面设置为主页面并在每个页面中包含“中央集线器”文件来解决了这个问题。基本上,它是一个 javascript 往返包含。

这比看起来的成本要低,因为网页的整个想法是服务器始终响应客户端对“下一页”的请求。被请求的内容在范围内由被调用的页面定义。

唯一的缺点是应用程序的“web 片段”必须部分分开:它们的大部分内容都在一个真正的命名 .asp 文件中,但它们的结构和关系在主 .asp 文件中定义的足够多(所以例如,一个 web 片段中的菜单项知道用于调用或加载另一个 web 片段的名称以及应该如何进行加载)。不过,在某种程度上,这仍然比传统网站的优势,因为传统网站的每个页面都必须知道如何加载其他页面。现在,我可以做一些事情,比如“以它想要的方式加载这部分(无论是整个页面还是其他页面)”。

我还对其进行了设置,因此每个部分都可以拥有自己的 javascript 和 css(如果只有该部分需要这些东西)。然后,这些文件仅在第一次加载该部分时通过 javascript 动态包含。然后,如果零件被重复加载,它不会产生额外的开销。

于 2010-10-18T23:41:31.437 回答