【问题标题】:Redirect response output with VBScript in ASP classic在 ASP 经典中使用 VBScript 重定向响应输出
【发布时间】:2010-07-23 22:06:39
【问题描述】:

在纯 .asp 文件中,<% %> 标记之外的任何内容都将直接发送到输出缓冲区。此外,<%= %> 标记中的表达式被评估并发送到输出缓冲区。

我想重定向它,以便在我建立的某些上下文中,将这两个构造的结果发送到我控制的缓冲区。如果可能的话,我希望能够动态地执行此操作,以便我可以在运行时将输出重定向到不同的缓冲区。

这个问题是开放式的,主要是因为我将围绕这个解决方案规划我正在构建的内容。我可以使用任何现有的方式来捕获此输出。性能和易用性不是主要考虑因素。

这是this question 的续集,我在其中尝试了一种可能的解决方案,但结果无效。

【问题讨论】:

    标签: asp-classic vbscript


    【解决方案1】:

    实际上,您正在尝试重写 asp.dll ISAPI 过滤器。如果你真的想这样做,你可以尝试在 asp.dll 周围编写一个包装 DLL,它会覆盖它的 WriteClient 函数。这不会是直截了当的,并且会引出你想要完成什么的问题。

    一个更简单的解决方案是完全避免使用<% %>,而是将整个页面(或大部分)组合在代码中,这样您的页面只不过是:

    <html>
    <%=OutputHtml()%>
    </html>
    

    通过这种方式,您可以完全控制输出的内容和时间。

    【讨论】:

      【解决方案2】:

      这不是一个真正的解决方案,但这是我能想到的最好的解决方案:

          <% sub foo %>
                  <h1>Hello, World!</h1>
          <% end sub %>
      

      然后可以在需要时将子内容写入响应。可以使用 GetRef 操作子。这会用 subs 污染全局命名空间;它们甚至不能是方法,因为 GetRef 不能与它们一起使用。 (第一次我测试了这个,我不小心踩到了一个现有的函数。)

      如果可能的话,我真的想改进这一点。如有任何反馈,我将不胜感激。

      【讨论】:

        【解决方案3】:

        我不认为你可以在 ASP 中做到这一点。您可以尝试创建一个 ISAPI 过滤器,该过滤器将监视您放入其中的某些占位符的响应,并对占位符之间的数据执行不同的操作。
        我不确定你的最终目标是什么,所以我不知道这是否适合你。

        【讨论】:

          【解决方案4】:

          对于 的事情,您可以编写自己的函数:

          function [=](val)
              response.write val
              ' do anything you want with val
          end function
          

          我认为另一件事是不可能的。但是您可以为要重定向的每个输出使用 构造...

          【讨论】:

          • 不起作用。 = 不是一个有效的标识符,括号表示法不会将 语法转换为对 = 函数的调用。
          • 好吧,抱歉。您必须使用 进行通话。嗯,这对你没有多大帮助,是吗?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-29
          • 1970-01-01
          相关资源
          最近更新 更多