Перенаправить вывод ответа с помощью VBScript в ASP classic - PullRequest
3 голосов
/ 24 июля 2010

В простом файле .asp любое содержимое вне тегов <% %> отправляется непосредственно в выходной буфер. Кроме того, выражение в тегах <%= %> оценивается и отправляется в выходной буфер.

Я хочу перенаправить его так, чтобы в некотором контексте, который я устанавливаю, результат этих двух конструкций вместо этого отправлялся в буфер, которым я управляю. Если возможно, я хотел бы иметь возможность делать это динамически, чтобы я мог перенаправить вывод в разные буферы во время выполнения.

Проблема является открытой, в основном потому, что я буду планировать, что я строю вокруг этого решения. Я мог бы использовать любой способ, который существует, чтобы захватить этот вывод. Производительность и простота использования не являются основными соображениями.

Это продолжение этого вопроса , в котором я пробую одно из возможных решений, которое, как оказывается, не работает.

Ответы [ 4 ]

1 голос
/ 02 августа 2010

Фактически вы пытаетесь переписать ISAPI-фильтр asp.dll. Если вы действительно хотите это сделать, вы можете попытаться написать DLL-оболочку вокруг asp.dll, которая переопределяет функцию WriteClient . Это не будет простым и напрашивается вопрос о том, что вы пытаетесь достичь.

Гораздо более простым решением было бы избежать использования <% %> в целом и вместо этого собрать всю страницу (или большую ее часть) в коде, чтобы ваша страница была не чем иным, как:

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

Таким образом, вы можете иметь полный контроль над тем, что и когда выводится.

1 голос
/ 27 июля 2010

Это не настоящее решение, но лучшее, что я могу придумать:

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

Тогда содержимое подпрограммы может быть записано в Ответ, если и когда оно потребуется.Подпрограммой можно управлять с помощью GetRef.Это загрязнит глобальное пространство имен подпрограммами;они даже не могут быть методами, так как GetRef не будет работать с ними.( первый раз Я проверил это, я случайно нажал на существующую функцию.)

Я бы действительно хотел бы улучшить это, если это возможноБуду признателен за любые отзывы.

1 голос
/ 02 августа 2010

Я не думаю, что вы можете сделать это в ASP.Вы можете попытаться создать фильтр ISAPI, который будет отслеживать ответ для некоторых заполнителей, которые вы добавляете туда, и делать что-то другое с данными между заполнителями.
Я не уверен, какова ваша конечная цель, поэтому я не знаюесли это сработает для вас.

0 голосов
/ 26 июля 2010

хорошо для вещи <% =%> вы могли бы написать свою собственную функцию:

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

другое, я думаю, невозможно.но вы можете использовать конструкцию <% =%> для каждого вывода, который вы хотите перенаправить ...

...