-2

我正在處理遺留代碼,其中包含另一個ASP頁面。在傳統ASP中傳遞變量

<!--#INCLUDE virtual="/PAGE1.ASP"--> 

得到一個變量,例如x,從該頁面,我beleive我會做:

x = Request.Form("x") 

是正確的?

此外,變量名稱是否區分大小寫的經典.ASP文件?

非常感謝。

+0

在這種情況下(參見下面冗長的討論),變量實際上是一個名爲「Err」的內置對象,不需要定義並且是全局可用的。改變原來的問題會使一些不需要的答案,但是,「錯誤」不需要Request.Form - 但是這些答案中的一些可能會幫助其他人有類似的問題和不同的變量名稱。謝謝 – JosephDoggie 2014-10-01 19:30:43

+1

經典ASP變量不區分大小寫。 – Frank 2014-10-02 19:42:52

+2

@Frank如果您在Classic ASP中使用[tag:jscript]作爲您的服務器端腳本語言,那麼該語句不完全正確。 – Lankymart 2014-10-09 12:28:00

回答

2

如果你有這樣的事情<input type="text" value="something" name="x"/>的第一頁上,然後是的,request.form(x)會抓住這個值假設形式有post

http://www.w3schools.com/asp/asp_inputforms.asp

+0

對不起,它沒有聲明那樣。 – JosephDoggie 2014-09-30 20:40:45

+0

x顯然是一個持有事件的對象,因爲它使用了「.raise」事件。我使用VS 2010來查看這個文件,它實際上是在VS 6中創建的;我不確定項目文件是否定義了這些......無論如何將一個對象自動提供給另一個文件。這個人的目的是顯然會引起錯誤... – JosephDoggie 2014-09-30 20:42:57

+0

任何人對這種情況有任何想法?定義通常「保存」在.asp文件或其他地方?我有點新的經典ASP ....這是遺留代碼。 – JosephDoggie 2014-09-30 20:55:25

2

假設PAGE1.ASP的方法聲明爲dim foo這樣一個變量,該變量是全球性的,父頁面可以通過foo訪問它,例如foo = "bar"

6

您應該將頁面內置到一個連續的頁面中,這樣如果包含多個.asp文件,它們將構建完成的頁面。

舉例來說,如果你有三個文件:

File_1.asp

<h1>Hello, World!</h1> 

File_2.asp

<p>This file will be included too!</p> 

File_3.asp

<%Dim version 
version = 1.1%> 

...和它們包含在一個核心文件...

File_Output.asp

<!-- #include virtual="file_1.asp" --> 
<!-- #include virtual="file_2.asp" --> 
<!-- #include virtual="file_3.asp" --> 
<% Response.Write(version) %> 

File_Output.asp將顯示在File_3.asp定義的version變量。

有一個很好的關於它的小文章here

- 編輯 -

我想補充(錯過了你的帖子的末尾的問題):

區分大小寫依賴於傳統的ASP使用的腳本語言。使用VBScript變量名稱的情況下敏感,而與JScript(其中,在語法上,非常像JavaScript)變量區分大小寫。

此外,爲解決Err對象:

有一個偉大的小片here,但得到的基本事實,你需要用你的代碼中的錯誤捕獲塊,像這樣:

On Error Resume Next '<-- This line starts trapping errors 
    ... 
On Error Goto 0   '<-- This line stops trapping errors 

如果在此塊中發生錯誤,您需要處理它。與ASP.NET,Java等不同,您不會被告知有錯誤;沒有好的Try...Catch包裝來很好地處理錯誤。你必須預測哪裏會發生錯誤。通常這很明顯。如果您的腳本中有數據庫操作,那麼在數據讀取或寫入後直接測試錯誤是個好主意。要檢查錯誤很簡單 - 你測試Err對象的Number屬性:

On Error Resume Next '<-- This line starts trapping errors 
    'Some database manipulation... 
    If Err.Number <> 0 Then 
     ... 'Handle the error 
    End If 
On Error Goto 0   '<-- This line stops trapping errors 

這可以擴展到考慮到不同的錯誤信息:

On Error Resume Next '<-- This line starts trapping errors 
    'Some database manipulation... 
    Select Case Err.Number 
     Case 1 
      ... 'Handle the error 
     Case 2 
      ... 
     Case 3021 'No data returned 
      Response.Write("No data was returned.") 
    End Select 
On Error Goto 0   '<-- This line stops trapping errors 

希望這有助於。

+0

我的帖子有問題嗎?有人下了我投票... – Paul 2014-10-03 08:20:58

+1

沒問題@Paul,但它是一個非常詳細的簡潔的答案。 +1 – Lankymart 2014-10-03 17:18:22

+0

謝謝Lanky - 讚賞。 :O) – Paul 2014-10-06 07:43:01