ความเข้าใจเกี่ยวกับโพสต์แบ็คใน ASP.NET
เมื่อพัฒนาใน ASP.NET ความท้าทายที่พบได้บ่อยคือการจัดการโพสต์แบ็ค – กระบวนการที่ทำให้หน้าส่งข้อมูลกลับไปยังเซิร์ฟเวอร์เพื่อการประมวลผล โดยเฉพาะอย่างยิ่งในโค้ดรุ่นเก่า การระบุว่าเหตุการณ์ใดที่ทำให้เกิดโพสต์แบ็คเป็นสิ่งสำคัญ ในบล็อกโพสต์นี้เราจะสำรวจวิธีที่ปรับปรุงแล้วในการระบุเหตุการณ์โพสต์แบ็คภายในเหตุการณ์ Page_Load
โดยไม่ต้องพึ่งพาการตรวจสอบที่ซับซ้อนและเปราะบาง
ปัญหา
ในฟอร์มเว็บ ASP.NET ปกติ เมื่อผู้ใช้มีป interacción กับการควบคุม (เช่นปุ่ม) หน้าจะทำการโพสต์แบ็คซึ่งกระตุ้นการดำเนินการโค้ดฝั่งเซิร์ฟเวอร์ โค้ดรุ่นเก่ามักพยายามกำหนดว่าการควบคุมใดที่ทำให้เกิดโพสต์แบ็คโดยการตรวจสอบข้อมูล Request
โดยตรง
นี่คือตัวอย่างของการดำเนินการที่มีปัญหา:
if (Request.Form["__EVENTTARGET"] != null &&
(Request.Form["__EVENTTARGET"].IndexOf("BaseGrid") > -1 || Request.Form["btnSave"] != null))
{
// ทำอะไรบางอย่าง
}
แม้ว่าวิธีนี้จะทำงานได้ แต่ก็เสี่ยงต่อการล้มเหลวหากชื่อของการควบคุมใดๆ ถูกเปลี่ยน และมันสามารถทำให้โค้ดของคุณยุ่งเหยิงได้ ดังนั้นเราจะทำอะไรแทน?
โซลูชันที่ดีกว่า: การรับควบคุมโพสต์แบ็ค
แทนที่จะตรวจสอบพารามิเตอร์คำขอเฉพาะ เราสามารถสร้างวิธีการช่วย GetPostBackControl
ที่จะระบุการควบคุมที่รับผิดชอบสำหรับโพสต์แบ็คแบบไดนามิก วิธีนี้จะทำให้โค้ดของคุณสะอาดขึ้นและมีโอกาสเกิดข้อผิดพลาดน้อยลง
การติดตั้ง
นี่คือวิธีที่คุณสามารถนำวิธีการนี้ไปใช้ในแอปพลิเคชัน ASP.NET ของคุณ:
public static Control GetPostBackControl(Page page)
{
Control control = null;
string ctrlname = page.Request.Params.Get("__EVENTTARGET");
if (!string.IsNullOrEmpty(ctrlname))
{
control = page.FindControl(ctrlname);
}
else
{
foreach (string ctl in page.Request.Form)
{
Control c = page.FindControl(ctl);
if (c is System.Web.UI.WebControls.Button)
{
control = c;
break;
}
}
}
return control;
}
คำอธิบายของโค้ด
-
เรียกคืน Event Target: วิธีการเริ่มต้นโดยพยายามดึงค่าของพารามิเตอร์
__EVENTTARGET
ซึ่งบ่งบอกว่าการควบคุมใดที่รับผิดชอบสำหรับโพสต์แบ็ค -
ค้นหาการควบคุม: หากพบชื่อการควบคุม วิธีการจะใช้
FindControl
เพื่อรับการควบคุมที่เกี่ยวข้องในหน้า -
fallback สำหรับการควบคุมปุ่ม: หากไม่พบชื่อการควบคุมจาก
__EVENTTARGET
วิธีการจะวนซ้ายผ่านการควบคุมฟอร์มทั้งหมด หากพบการควบคุมที่เป็นปุ่ม จะคืนค่าปุ่มนั้นในฐานะการควบคุมที่ทำให้เกิดโพสต์แบ็ค
ประโยชน์ของวิธีนี้
-
ความเรียบง่าย: วิธีการนี้ซ่อนความซับซ้อนของการระบุการควบคุมโพสต์แบ็ค ทำให้การจัดการโค้ดของคุณง่ายขึ้น
-
ความทนทาน: ด้วยวิธีนี้โค้ดของคุณจะมีความแข็งแกร่งน้อยลงเมื่อมีการเปลี่ยนแปลงใน ID ของการควบคุมหรือโครงสร้าง เพราะมันไม่ได้ขึ้นอยู่กับชื่อเฉพาะโดยตรง
สรุป
การระบุเหตุการณ์โพสต์แบ็คใน ASP.NET เป็นสิ่งสำคัญสำหรับการรักษาฟังก์ชันและความสามารถในการใช้งานในแอปพลิเคชันเว็บของคุณ การใช้วิธี GetPostBackControl
คุณสามารถปรับปรุงโค้ดของคุณและหลีกเลี่ยงข้อผิดพลาดที่อาจเกิดขึ้นจากระบบรุ่นเก่า
สำหรับการสำรวจอย่างลึกซึ้งและเคล็ดลับเพิ่มเติม คุณสามารถดูเพิ่มเติมเกี่ยวกับหัวข้อนี้ ได้ที่นี่
ด้วยวิธีนี้ในการจัดการโพสต์แบ็คที่สะอาดขึ้น คุณสามารถมั่นใจว่าแอปพลิเคชันของคุณจะมีประสิทธิภาพและสามารถบำรุงรักษาได้