สิ่งที่น่าอายก็คือก่อนถึงวันหยุดเทศกาลฤดูใบไม้ผลิ ฉันเขียนโค้ดไปชิ้นหนึ่ง ฉันไม่รู้ว่าทำไม ASPX สามารถโหลดโค้ดใน ASCX.cs ได้ แต่ไม่สามารถโหลดไฟล์ต้นฉบับใน ASCX ได้ เพราะฉันไม่สามารถสงบสติอารมณ์ได้ ลงไม่ได้ครับ หลังจากแก้ปัญหานี้แล้วกลับมาทำงานวันนี้พบว่าปัญหาเกิดจากการเขียนคำสั่ง @Register ของ ASPX ไม่ถูกต้อง
ควรเขียนวิธีที่ถูกต้องดังนี้:
<%@ Register TagPrefix="myTagPrefix" TagName="ConfigNavigation" Src="/Controls/ConfigNavigation.ascx" %> แต่ฉันเขียนไว้ดังนี้:
<%@ Register TagPrefix="myTagPrefix" Namespace="MyWEB.Controls" Assembly="MyWebProject" %>วิธีการเขียนแบบหลังจะโหลดคลาสที่สอดคล้องกับไฟล์ cs เท่านั้น แต่ไม่ใช่เนื้อหาใน ascx จึงปรากฏปัญหา ฉันก็เจอที่นี่
ต่อไปนี้เป็นบทสรุปของหลายวิธีในการเขียนคำสั่ง @Register ซึ่งคอมไพล์โดยอ้างอิงถึง http://msdn.microsoft.com/zh-cn/library/c76dd5k1.aspx ของ MSDN :
<%@ ลงทะเบียน tagprefix="tagprefix" namespace="namespace" assembly="assembly" %>
<%@ ลงทะเบียน tagprefix="tagprefix" namespace="namespace" %>
<%@ Register tagprefix="tagprefix" tagname="tagname" src="pathname" %>แต่ละแอตทริบิวต์มีคำอธิบายดังนี้:
แท็กคำนำหน้า
นามแฝงที่กำหนดเองที่ให้ข้อมูลอ้างอิงสั้นๆ ไปยังเนมสเปซของแท็กที่ใช้ในไฟล์ที่มีคำสั่ง
เนมสเปซ เนมสเปซของการควบคุมแบบกำหนดเองที่กำลังลงทะเบียน
tagname นามแฝงใด ๆ ที่เกี่ยวข้องกับชั้นเรียน คุณสมบัตินี้ใช้สำหรับการควบคุมผู้ใช้เท่านั้น
แอสเซมบลี แอสเซมบลีที่อยู่ในเนมสเปซที่เกี่ยวข้องกับแอตทริบิวต์ tagprefix
ชื่อแอสเซมบลีต้องไม่มีนามสกุลไฟล์ นอกจากนี้ โปรดสังเกตด้วยว่า ถ้าแอตทริบิวต์แอสเซมบลีหายไป ตัววิเคราะห์ ASP.NET จะถือว่าซอร์สโค้ดมีอยู่ในโฟลเดอร์ App_Code ของแอปพลิเคชัน ถ้าคุณต้องการลงทะเบียนซอร์สโค้ดของตัวควบคุมบนเพจโดยไม่ต้องคอมไพล์ ให้วางซอร์สโค้ดในโฟลเดอร์ App_Code ASP.NET รวบรวมไฟล์ต้นฉบับในโฟลเดอร์ App_Code แบบไดนามิกขณะรันไทม์
ตำแหน่ง (สัมพัทธ์หรือสัมบูรณ์) ของไฟล์ควบคุมผู้ใช้ ASP.NET ที่ประกาศซึ่งเชื่อมโยงกับ src และคู่ tagprefix:tagname
ค่าแอ็ตทริบิวต์ src อาจเป็นพาธสัมพัทธ์หรือพาธสัมบูรณ์จากไดเร็กทอรีรากของแอปพลิเคชันไปยังไฟล์ต้นฉบับการควบคุมผู้ใช้ เพื่อความสะดวกในการใช้งาน ขอแนะนำให้ใช้เส้นทางสัมพัทธ์ ตัวอย่างเช่น สมมติว่าไฟล์ควบคุมผู้ใช้ของแอปพลิเคชันทั้งหมดถูกจัดเก็บไว้ในไดเร็กทอรีย่อย Usercontrol ของไดเร็กทอรีรากของแอปพลิเคชัน หากต้องการรวมการควบคุมผู้ใช้ไว้ในไฟล์ Usercontrol1.ascx ให้รวมสิ่งต่อไปนี้ในคำสั่ง @Register:
Src="~usercontrolusercontrol1.ascx" อักขระตัวหนอน (~) แสดงถึงไดเร็กทอรีรากของแอปพลิเคชัน