2010-07-23 51 views
3

在普通的.asp文件中,<% %>標籤之外的任何內容都會直接發送到輸出緩衝區。此外,評估<%= %>標籤中的表達式並將其發送到輸出緩衝區。使用ASP腳本中的VBScript重定向響應輸出

我想重定向它,以便在我建立的某個上下文中,這兩個構造的結果被髮送到我控制的緩衝區。如果可能的話,我希望能夠動態執行此操作,以便在運行時將輸出重定向到不同的緩衝區。

問題是開放式的,很大程度上是因爲我將計劃圍繞此解決方案構建的內容。我可以使用任何存在的方式來捕獲這個輸出。性能和易用性不是主要考慮因素。

這是this question的續作,其中我嘗試了一種可能的解決方案,結果不起作用。

回答

1

實際上,您正試圖重寫asp.dll ISAPI篩選器。如果你真的想這樣做,你可以嘗試在asp.dll上編寫一個封裝DLL,它將覆蓋它的WriteClient函數。這不是直截了當的,並且會引起你試圖完成的問題。

一個簡單得多的解決辦法是避免使用<% %>完全,而是組裝整個頁面(或大部分)的代碼,使你的頁面無非是:

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

這樣,你可以完全控制輸出和何時輸出。

-1

以及爲<%=%>的事情,你可以寫自己的函數:

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

其他的事情是不可能的,我認爲。但你可以使用<%=%>構建要重定向每個輸出...

+0

不起作用。 =不是有效的標識符,並且括號表示法不會執行任何操作來將<%= %>語法轉換爲對=函數的調用。 – 2010-07-26 16:46:01

+0

好的,對不起。 您必須爲呼叫使用<%[=]「teststring」%>。 mhh這對你無幫助嗎? – ulluoink 2010-07-27 13:12:01

1

這是不是一個真正的解決方案,但它是我能拿出最好的:

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

然後,如果需要,可將子內容寫入響應。該子可以使用GetRef進行操作。這將污染全球命名空間與潛艇;他們甚至不能成爲方法,因爲GetRef不能與它們一起工作。 (該第一次我測試這一點,我不小心踩在現有的功能。)

我倒是真的喜歡改善這一點,如果可能的話。我會很感激任何反饋。

1

我不認爲你可以在ASP中做到這一點。您可以嘗試創建一個ISAPI篩選器,該篩選器將監視某些佔位符的響應,您可以在其中對佔位符之間的數據執行一些不同的操作。
我不確定你的最終目標是什麼,所以我不知道這是否適合你。