VBScript สำหรับแต่ละปัญหา

ฉันสับสนเกี่ยวกับวิธีการทำ for-each loop สำหรับอาร์เรย์ของอ็อบเจ็กต์ ขณะนี้วิธีการของฉันทำให้ฉันมีข้อผิดพลาดด้วยวิธีใดวิธีหนึ่งจากสองวิธี การดำเนินการ for loop อย่างใดอย่างหนึ่ง และประสบปัญหาเนื่องจากคิดว่าตัวแปรคลาสไม่ได้ถูกกำหนดไว้ หรือพบปัญหาว่าประเภทวัตถุเป็นการกำหนดที่ผิดกฎหมาย

นี่คือคลาสที่ฉันกำหนด:

Class url_Link
     Public title, link
     Public Default Function Init(newTitle, newLink)
         title = newTitle
         link = newLink
         Set Init = Me
     End Function
End Class

เพื่อการอ้างอิง ข้อผิดพลาดที่ฉันได้รับคือ:

ข้อผิดพลาดรันไทม์ Microsoft VBScript '800a01f5'
การกำหนดที่ผิดกฎหมาย: 'url_Link'
บรรทัด 674

ใช้ข้อมูลโค้ดนี้:

<% for each x in systemSettingsArray%> 
<tr>
<td class='nograph'><A href='/th<%x.link%>'><%x.title%></a></td>
</tr>
<%next%> 

และเมื่อฉันเปลี่ยน url_Link เป็น x ฉันได้รับข้อผิดพลาดนี้:

การเรียกขั้นตอนหรืออาร์กิวเมนต์ "ลิงก์" ไม่ถูกต้อง

รหัสที่สร้างวัตถุและเติมอาร์เรย์:

Dim systemSettingsArray(1)
Dim link
Dim arrayCounter
arrayCounter = 0

Set systemSettingsArray(arrayCounter) = (New url_Link)("Account Administration", "Maintenance/Account_Admin.asp")
arrayCounter = arrayCounter + 1
Set systemSettingsArray(arrayCounter) = (New url_Link)("Time Approval", "Maintenance/system_Time_Approval.asp")

person Marshall Tigerus    schedule 26.07.2013    source แหล่งที่มา
comment
ฉันยังได้รับการเรียกกระบวนการที่ไม่ถูกต้องหรือข้อผิดพลาดอาร์กิวเมนต์หากฉันเปลี่ยนสิ่งนี้เป็น for i=0 เป็น UBound(systemSettingsArray) และเปลี่ยนการเรียกเป็น systemSettingsArray(i).link   -  person Marshall Tigerus    schedule 26.07.2013
comment
คุณจะเติม systemSettingsArray ได้อย่างไร   -  person Ekkehard.Horner    schedule 26.07.2013
comment
รหัสเพื่อสร้างวัตถุและเติมอาร์เรย์ได้ถูกเพิ่มแล้ว   -  person Marshall Tigerus    schedule 26.07.2013
comment
ขอบคุณสำหรับรหัส; จากการทดสอบของฉัน มัน 'ใช้งานได้' ตราบใดที่คุณหลีกเลี่ยงข้อผิดพลาดที่ Ansgar ชี้ให้เห็น - โดยใช้ชื่อคลาสเป็นชื่อตัวแปร   -  person Ekkehard.Horner    schedule 26.07.2013
comment
ฉันทำให้มันใช้งานได้แล้ว แต่ตอนนี้มันไม่แสดงอะไรเลยแทนที่จะเป็นรหัสข้อผิดพลาด ความคิดใด ๆ ว่าทำไมมันถึงทำอย่างนั้น   -  person Marshall Tigerus    schedule 27.07.2013
comment
บันทึกการทดสอบบางส่วนเพื่อความชัดเจน ภายใน for loop ฉันได้รับข้อผิดพลาดในการเรียกขั้นตอนที่ไม่ถูกต้อง แต่การใช้โค้ดเดียวกันภายนอก for for นั้นจะแสดงอย่างถูกต้อง นี่มันน่าสับสนมาก   -  person Marshall Tigerus    schedule 27.07.2013
comment
ให้ฉันวลีสิ่งที่ฉันเพิ่งพูดดีขึ้นนิดหน่อย การวางการเรียกตัวแปรไว้นอกแท็ก html ทำให้ทำงานได้ดี (ฉันทำ response.write(systemSettingsArray(i).title) และ response.write(systemSettingsArray(i).link) และทั้งคู่ทำงานได้ดี เมื่ออยู่ในนั้น html ที่น่าเมา)   -  person Marshall Tigerus    schedule 27.07.2013
comment
ปรากฎว่าปัญหาคือฉันไม่มีเครื่องหมายเท่ากับ แท็ก asp ควรเป็น ‹%= %› ไม่ใช่ ‹% %›   -  person Marshall Tigerus    schedule 27.07.2013


คำตอบ (1)


คุณไม่สามารถสร้าง url_link ชื่อคลาส และ ชื่อตัวแปรในเวลาเดียวกันได้ นอกจากนี้ ฉันไม่เห็นคุณเริ่มต้นวัตถุ url_link เลย ต้องสร้างอินสแตนซ์ของคลาสที่กำหนดเองดังนี้:

Set linkobj = New url_link

หรือเช่นนี้ เมื่อคุณมีเมธอดที่ส่งคืนการอ้างอิงไปยังออบเจ็กต์นั้นเอง (ในกรณีของคุณ Init):

Set linkobj = (New url_link).Init("foo", "bar")

การทำเครื่องหมายวิธีการเป็น Default ช่วยให้คุณสามารถละเว้นการเรียกวิธีการที่ชัดเจน ดังนั้นคุณจึงสามารถเขียนข้างต้นเป็นได้

Set linkobj = (New url_link)("foo", "bar")
person Ansgar Wiechers    schedule 26.07.2013
comment
ฉันไม่ได้รวมไว้ในรหัสที่แสดง ฉันจะเพิ่มมันลงในรหัส - person Marshall Tigerus; 26.07.2013
comment
คุณยังคงไม่สามารถใช้ชื่อเดียวกันสำหรับคลาสและตัวแปรลูปได้แม้ว่าคุณจะเตรียมใช้งาน systemSetingsArray แล้วก็ตาม โปรดอัปเดตคำถามของคุณด้วยรหัสที่คุณแทนที่ url_link ด้วย x - person Ansgar Wiechers; 26.07.2013