ความเข้าใจใน DefaultEvent ของ ASP.NET User Control
เมื่อพัฒนา User Controls ใน ASP.NET นักพัฒนามักเผชิญกับความท้าทายเฉพาะอย่างหนึ่ง: วิธีการตั้งค่า DefaultEvent
สำหรับ User Control นี่คือสิ่งที่สำคัญโดยเฉพาะเมื่อคุณต้องการปรับปรุงกระบวนการทำงานของคุณให้ราบรื่นขึ้น โดยที่การคลิกสองครั้งจะสร้างตัวจัดการเหตุการณ์ให้ที่คุณต้องการโดยอัตโนมัติ ในโพสต์บล็อกนี้ เราจะเจาะลึกประเด็นนี้และสำรวจโซลูชันและข้อมูลเชิงลึกที่เป็นไปได้
คำบรรยายปัญหา
ลองนึกภาพว่าคุณได้สร้าง User Control ใน ASP.NET และกำหนดเหตุการณ์หนึ่งที่คุณต้องการให้ถือเป็นเหตุการณ์เริ่มต้นเมื่อคลิกสองครั้งที่ Control ในมุมมองการออกแบบ ในสถานการณ์นี้ คุณมี User Control ที่ชื่อว่า AddressBox
ซึ่งมีเหตุการณ์ชื่อว่า OKClicked
คุณคาดหวังว่าเมื่อคุณดับเบิ้ลคลิกที่ Control ในหน้า ASPX Visual Studio จะสร้างตัวจัดการสำหรับ OKClicked
แต่ที่จริงแล้วมันสร้างตัวจัดการสำหรับเหตุการณ์ Load
ทำไมถึงเกิดขึ้นได้?
การดำเนินการในปัจจุบัน
นี่คือภาพรวมของการดำเนินการในโค้ดของ User Control ของคุณ:
[System.ComponentModel.DefaultEvent("OKClicked")]
public partial class AddressBox : System.Web.UI.UserControl
{
public event EventHandler OKClicked;
}
ผลลัพธ์ในปัจจุบัน
หลังจากคลิกสองครั้งที่ Control โค้ดที่สร้างขึ้นคือ:
protected void AddressBox1_Load(object sender, EventArgs e)
{
}
ตามที่คุณเห็น ตัวจัดการเหตุการณ์ที่ถูกสร้างสำหรับ Load
ไม่ใช่สิ่งที่คุณคาดหวัง และมันทำให้เกิดคำถาม: สามารถกำหนด DefaultEvent สำหรับ UserControl ได้หรือไม่?
การตรวจสอบพฤติกรรมของ DefaultEvent
DefaultEvent ที่สืบทอด
ในการเข้าใจว่าทำไม Visual Studio ถึงตั้งค่าให้สร้างเหตุการณ์ Load
โดยค่าเริ่มต้น จึงเป็นสิ่งสำคัญที่จะต้องทราบว่า DefaultEventAttribute
สามารถสืบทอดได้ คลาส UserControl
ใน ASP.NET มีเหตุการณ์เริ่มต้นที่ถูกตั้งค่าเป็น Load
ดังนั้น User Control ที่กำหนดเองของคุณคือ AddressBox
จึงสืบทอดพฤติกรรมนี้
- ข้อมูลเชิงลึกจากการสะท้อน: โดยใช้เครื่องมือต่างๆ เช่น Reflector คุณสามารถเห็นว่าเหตุการณ์เริ่มต้นของคลาส
UserControl
จริง ๆ แล้วเป็นเหตุการณ์Load
ดังนั้น แม้ว่าคุณจะได้กำหนดOKClicked
เป็นค่าเริ่มต้นแล้ว แต่ดูเหมือนว่า Visual Studio จะให้ความสำคัญกับเหตุการณ์ที่สืบทอดนี้
การแก้ปัญหาที่เป็นไปได้
ในขณะที่อาจไม่มีวิธีที่ตรงไปตรงมาในการเปลี่ยนแปลงพฤติกรรมนี้เนื่องจากการสืบทอดของคลาส แต่คุณสามารถทำสิ่งต่อไปนี้:
- ตรวจสอบคุณสมบัติอื่นๆ: บางครั้งคุณสมบัติเสริมอาจมีอิทธิพลต่อพฤติกรรม ตรวจสอบแอตทริบิวต์ที่สืบทอดที่อาจมีผลต่อการประมวลผล
DefaultEvent
- พิจารณาการสร้าง Control ที่กำหนดเอง: หากการตั้งค่า
DefaultEvent
เป็นสิ่งสำคัญสำหรับกรณีการใช้งานของคุณ ให้พิจารณาสร้าง Control ที่กำหนดเองแทน ซึ่งคุณสามารถควบคุมเหตุการณ์และพฤติกรรมของพวกเขาได้อย่างเต็มที่
สรุป
โดยสรุป พฤติกรรมเริ่มต้นเมื่อคลิกสองครั้งที่ ASP.NET User Control จะถูกกำหนดโดยการสืบทอดจากคลาสฐาน UserControl
โดยหลัก แม้ว่าคุณจะสามารถระบุ DefaultEvent
สำหรับ User Control ของคุณได้ แต่ Visual Studio อาจยังคงใช้เหตุการณ์ที่สืบทอด เช่น Load
การทำความเข้าใจพฤติกรรมนี้สามารถช่วยให้คุณปรับวิธีการของคุณให้เหมาะสม
โบนัส: การจัดการอันเดอร์สกอร์ในโค้ด
คุณยังสอบถามเกี่ยวกับการใส่อันเดอร์สกอร์ในโค้ด ใน C# โดยทั่วไปคุณไม่จำเป็นต้องหลีกเลี่ยงอันเดอร์สกอร์ คุณสามารถใช้งานได้ทันทีในชื่อของตัวแปรและเมธอด ตัวอย่างเช่น:
public void Do_Something()
{
}
หากคุณมีคำถามเพิ่มเติมเกี่ยวกับ User Controls ใน ASP.NET อย่าลังเลที่จะติดต่อเข้ามา!