ความเข้าใจเกี่ยวกับโพสต์แบ็คใน 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 คุณสามารถปรับปรุงโค้ดของคุณและหลีกเลี่ยงข้อผิดพลาดที่อาจเกิดขึ้นจากระบบรุ่นเก่า

สำหรับการสำรวจอย่างลึกซึ้งและเคล็ดลับเพิ่มเติม คุณสามารถดูเพิ่มเติมเกี่ยวกับหัวข้อนี้ ได้ที่นี่

ด้วยวิธีนี้ในการจัดการโพสต์แบ็คที่สะอาดขึ้น คุณสามารถมั่นใจว่าแอปพลิเคชันของคุณจะมีประสิทธิภาพและสามารถบำรุงรักษาได้