程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> ASP入門教程 >> ASP 3.0高級編程(十九)

ASP 3.0高級編程(十九)

編輯:ASP入門教程
5.3.2 Dictionary對象示例
       本書提供了一系列示例文件可用來試驗腳本運行時間庫的各種屬性。
       本章代碼的缺省頁面提供了一系列可使用的VBScript示例鏈接。有些示例對JScript同樣有效。這些示例存放在Chapter05目錄下相應的子目錄裡,顯示的界面如圖5-2所示:

圖5-2  ASP腳本運行期對象示例頁面
       要查看Dictionary對象的運行,在菜單頁面點擊第一個鏈接,打開名叫show_dictionary.ASP的頁面。這個頁面顯示了我們提供的Dictionary對象的內容,允許試驗其屬性和方法。屏幕如圖5-3所示:

圖5-3  Dictionary對象的屬性和方法
1.  Dictionary的global.asa文件
隨Dictionary對象示例頁面提供的文件之一是global.asa。它創建並預先填充了一個會話層作用域的Dictionary對象,因此其內容在頁面請求之間不會丟失。一般說來(考慮到可擴展性),這不是一個理想的做法。在這個例子裡,可以看到Dictionary的屬性和方法的效果。
如果在自己的服務器上下載並安裝示例,必須創建一個基於此global.asa文件的虛擬應用程序。或者將其內容添加到缺省站點的根文件夾中的global.asa文件裡。在第3章講述了如何用向導創建虛擬應用程序。然而對於本示例,創建一個虛擬應用程序最簡單的方法是在Chapter05示例文件夾內右擊dictionary子文件夾,在PRopertIEs對話框的Home Directory選項卡裡,點擊Create按鈕,如圖5-4所示:

圖5-4  創建虛擬應用程序
在這個global.asa文件裡,代碼使用<OBJECT>元素創建一個會話層作用域的Scripting.Dictionary對象實例。然後在session_onStart事件處理程序裡將一系列值用Add方法放入Dictionary中,並將對Dictionary對象的引用指定給ASP會話變量MyDictionary:
<OBJECT ID="objBookList" RUNAT="SERVER" SCOPE="SESSION"
        PROGID="Scripting.Dictionary">
</OBJECT>

<SCRIPT LANGUAGE="VBScript" RUNAT="SERVER">

Sub Session_onStart()
  objBookList.Add "2610", "Professional Active Server Pages 3.0"
  objBookList.Add "1274", "Instant JavaScript"
  objBookList.Add "2882", "Beginning ASP Components"
  objBookList.Add "1797", "Professional ASP Techniques"
  objBookList.Add "1835", "AD0 2.0 Programmer's Reference"
  Set Session("MyDictionary") = objBookList
End Sub

</SCRIPT>
2.  Dictionary示例頁面
在“Scripting.Dictionary Object”主頁面裡,首要的任務是得到一個會話層作用域的Dictionary對象實例的引用。注意,這個引用是一個對象變量,因此必須在VBScript裡使用Set關鍵字。
然後,檢查一下是否得到了一個對象(這是個好習慣),如果沒有正確地建立包含global.asa文件的虛擬應用程序,檢查一下問題出在哪裡。你將看到我們自己的消息代替了ASP的錯誤消息(但是注意,對於這一操作必須關閉缺省的錯誤處理)。
<%

on error resume next  ' turn off error handling to test if object exists

'retrIEve Dictionary object from user's session
Set objMyData = Session("MyDictionary")

If IsObject(objMyData) Then  'found Dictionary object in Session

%>

<P><DIV CLASS="subhead">Iterating the Dictionary with Arrays</DIV>
<%
arrKeysArray = objMyData.Keys           'get all the keys into an array
arrItemsArray = objMyData.Items         'get all the items into an array
For intLoop = 0 To objMyData.Count - 1   'iterate through the array
    Response.Write "Key: <B>" & arrKeysArray(intLoop) & "</B> &nbsp; Value: <B>" _
                 & arrItemsArray(intLoop)& "</B><BR>"
Next
%>

… Other code and controls go here …

  <%
Else

  'could not find Dictionary object in the session
  Response.Write "Dictionary object not available in global.asa for session"

End If
%>
顯示在頁面上的Dictionary內容列表是使用Dictionary對象的Key和Items方法創建的兩個數組,可使用前面的代碼遍歷它們。
3.  Dictionary頁面控件
在Dictionary的內容列表下是一系列的Html控件,可用於設定Dictionary對象的某些屬性和執行各種方法。這些控件全部在一個<FORM>內,其ACTION屬性值是本頁面,所以窗體的內容提交回本頁面。在前面的章節的示例裡使用了同樣的技術。
在<FORM>段中,改變屬性或執行一個方法是通過一個按鈕(沒有標題)實現的。用於屬性和方法的值放入按鈕旁的文本框或列表框中。
該頁的第一個按鈕用於設定Dictionary裡的條目的Key屬性。這裡使用了一個下拉列表,可以選擇一個已經存在的Key值。下面的代碼創建了頁面內該部分的控件。為了填充列表,使用了另外一個遍歷Dictionary對象的技術,即For Each … Next語句。代碼如下:

<FORM ACTION="<% = Request.ServerVariables("SCRIPT_NAME") %>" METHOD="POST">

  <P><DIV CLASS="subhead">The Dictionary PropertIEs</DIV>
  <INPUT TYPE="SUBMIT" NAME="cmdChangeKey" VALUE="&nbsp;&nbsp;&nbsp;">
  &nbsp; Dictionary.Key ("
  <SELECT NAME="lstChangeKey" SIZE="1">
  <%
  For Each objItem in objMyData
    Response.Write "<OPTION>" & objItem
  Next
  %>
  </SELECT> ") = "
  <INPUT TYPE="TEXT" NAME="txtChangeKey" SIZE="15" VALUE="New Key Name"> "
  <BR>
  …
  … Other controls go here …
  …
</FORM>

4.  使用Dictionary的屬性和方法
在“Scription.Dictionary Object”頁面,點擊用來檢查並改變條目的Key屬性的按鈕,如圖5-5所示:

圖5-5  使用Dictionary的Key屬性
把窗體再次提交給頁面。該頁面包含一個腳本段,檢查被點擊的按鈕的值。它通過在Resquest.Form集合裡查找按鈕的名字來斷定單擊的是哪個按鈕。如果發現一個對應於cmdChangKey的值,則從列表中或文本框中得到相應的值並用來改變Key屬性:

'look for a command sent from the FORM section buttons
If Len(Request.Form("cmdChangeKey")) Then
    strKeyName = Request.Form("lstChangeKey")           'Existing key from list box
    strNewKey = Request.Form("txtChangeKey")            'New key value from text box
    objMyData.Key(strKeyName) = strNewKey               'Set key property of this item
End If

頁面重新載入後,在Dictionary的內容列表裡能看到相應的結果,如圖5-6所示:

圖5-6  頁面重載後的結果
頁面的其余代碼用來設定一個條目的Item屬性,或者執行Dictionary對象的方法。下面是這些操作的代碼,每段代碼與演示Key屬性的代碼非常類似。每次都將結果顯示在Dictionary的內容列表中:

If Len(Request.Form("cmdChangeItem")) Then
    strKeyName = Request.Form("lstChangeItem")   'Existing key from list box
    strNewValue = Request.Form("txtChangeItem")   'New item value from text box
    objMyData.Item(strKeyName) = strNewValue     'Set the Item property
End If

If Len(Request.Form("cmdAdd")) Then
strKeyName = Request.Form("txtAddKey")         'New key value from text box
    strItemValue = Request.Form("txtAddItem")        'New item value from text box
    objMyData.Add strKeyName, strItemValue          'Execute the Add method
End If

If Len(Request.Form("cmdRemove")) Then
    strKeyName = Request.Form("lstRemove")         'Existion key from list box
    objMyData.Remove strKeyName                        'Execute the Remove method
End If

If Len(Request.Form("cmdRemoveAll")) Then
    objMyData.RemoveAll                                      'Execute the RemoveAll method
End If

例如,如果現在點擊Add方法的按鈕,在Dictionary的內容列表裡將增加一個新的條目,如圖5-7所示:

圖5-7  增加一個新方法
結果如圖5-8所示:

圖5-8  Add方法的結果
可以在這個頁面中試驗Dictionary對象的屬性和方法,你將會發現什麼因素及在什麼環境下能引起Dictionary對象錯誤。例如,嘗試用與已經存在的一個條目相同的鍵值增加一個條目,看看會出現什麼結果。

5.4 Scripting.FileSystemObject對象
       FileSystemObject對象提供對計算機文件系統的訪問,它允許我們在代碼內操作文本文件、文件夾及驅動器。它是腳本運行期庫提供的對象之一,對於服務器ASP頁面內的VBScript和JScript都有效。如果頁面的擴展名為.hta(表示它們是HTA的一部分),它也可用在客戶端的IE 5中。本節僅討論在服務器上的ASP腳本如何使用FileSystemObject對象。
       超級文本應用程序(HTA)由指定的“受信任的”頁面組成,在頁面的<HEAD>段裡包含<HTA:application>元素。例如:
    <HTA:APPLICATION ID=”objMyApp” APPLICATIONNAME=”myApp”>
這些頁面可以使用客戶端腳本引擎中的一些不常用特性,這些特性中有FileSystemObject對象和TextStream對象。關於超級文本應用程序的更多信息,請訪問Microsoft Workshop網站。
可以使用下面的程序創建一個FileSystemObject對象實例:
‘ In VBScript:
Dim objMyfso
Set objMyFSO = Server.CreateObject(“Scripting.FileSystemObject”)

// In JScript:
var objMyFSO = Server.CreateObject(‘Scripting.FileSystemObject’);

<!-- Server-side with an OBJECT element -->
<OBJECT RUNAT=”SERVER” SCOPE=”PAGE” ID=”objFSO”
              PROGID=”Scripting.FileSystemObject”>
</OBJECT>
在ASP頁面裡,增加一個對於FileSystemObject類型庫的引用是非常有用的。這允許使用它直接定義的內置常數,不用像過去那樣用數字等效表達式代替。整個腳本運行期庫的類型庫可以增加到任何ASP頁面中,代碼如下:
<!-- METADATA TYPE=”typelib” FILE=”C:\WinNT\System32\scrrun.dll” -->如果你是在另一個目錄下安裝Windows,必須編輯FILE的屬性值。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved