หน้า 1 จากทั้งหมด 1

วงจรชีวิตของ webform (กันกระทู้หาย)

โพสต์แล้ว: 08/08/2019 4:23 pm
โดย jataz2
เมื่อไคลเอนต์มีการร้องขอไฟล์แบบไดนามิคไปที่ IIS การเรียกนี้จะถูกส่งต่อไปให้กับ aspnet_isapi.dll จากนั้นจะส่งผ่านเป็นทอดๆ ให้กับ HTTP Module และสุดท้ายก็จะมาทำงานที่ HTTP Handler ที่เป็นตัวรันเว็บฟอร์ม ดังภาพที่ 1
asp.net-page-lifecycle.gif
asp.net-page-lifecycle.gif (20.68 KiB) Viewed 511 times
ภาพที่ 1 การจัดการกับการเรียกไปยังเว็บฟอร์มของ IIS
เมื่อการร้องขอไฟล์เว็บฟอร์มมาถึง HTTP Handler ของเว็บฟอร์ม และจะมีการเรียกเมธอด ProcessRequest และเข้าสู่วงจรชีวิตของเว็บฟอร์มดังภาพที่ 2
Page-Events.gif
Page-Events.gif (23.52 KiB) Viewed 511 times
ภาพที่ 2 วงจรชีวิตของเว็บฟอร์ม
จากภาพที่ 2 เราจะแบ่งขั้นตอนการทำงานย่อยของเมธอด ProcessRequest ออกได้เป็น 8 ขั้นตอนดังนี้

ขั้นตอนที่ 1 Instantiation
ในขึ้นตอนนี้ ASP .NET จะมีการสร้างอ็อปเจ็กต์ของเว็บฟอร์มขึ้นมาโดยอัตโนมัติ ไม่ว่าเว็บฟอร์มของเราจะมีโค้ดแบบ Inline หรือ Code Behind ก็ตาม โดย ASP.NET จะเข้าไปทำการอ่านแท็กต่างๆ ที่อยู่ในมุมมองของ Source ในไฟล์ .aspx แล้วทำการสร้างอ็อปเจ็กต์เว็บฟอร์มขึ้นมาก่อน จากนั้น จึงทำการสร้างอ็อปเจ็กต์ของคอนโทรลแต่ละตัวที่อยู่ในเว็บฟอร์ม

ขั้นตอนที่ 2 Initialization
หลังจากที่มีการสร้างลำดับชั้นของคอนโทรลเสร็จแล้ว จะเข้ามาในส่วนของเหตุการณ์เริ่มต้น (Initialization) ของทั้งเว็บฟอร์ม และของคอนโทรลภายในเว็บฟอร์ม เหตุการณ์นี้ตรงกับเมธอด OnInit ของทั้งเว็บฟอร์ม และคอนโทรล โดยเมธอด OnInit ของคอนโทรลจะถูกเรียกก่อนจนครบทุกตัว จากนั้นจึงทำการเรียกเมธอด OnInit ของเว็บฟอร์ม
สำหรับเมธอด OnInit ของเว็บฟอร์ม เราสามารถเห็นเมธอดนี้ได้ ในตอนที่เพิ่มเว็บฟอร์มเข้ามาใหม่ในโปรเจคของ Visual Studio .NET 2003 เราจะสังเกตุเห็นส่วนของ Web Form Designer generated code ซึ่งถ้าคลิกเข้าไปดูภายในจะพบว่ามีเมธอด OnInit อยู่ภายใน และเราสามารถเข้าไปเขียนโค้ดเพิ่มเติมในส่วนนี้ได้ แต่สำหรับ Visual Studio 2005 ส่วนนี้จะถูกซ่อนไว้ ถ้าหากเราต้องการเขียนโค้ดเพิ่มในส่วนนี้เราต้องเพิ่มเมธอด OnInit นี้เข้าไปเอง

ขั้นตอนที่ 3 โหลด View State
การโหลดค่าจาก View State จะทำเฉพาะตอนที่เว็บฟอร์มมีการ Post back เท่านั้น ในขั้นตอนนี้ ASP .NET จะทำการโหลดค่าจาก View State แล้วนำค่านี้ไปกำหนดให้กับคอนโทรลในเว็บฟอร์มตามลำดับชั้นของอ็อปเจ็กต์เว็บฟอร์ม และคอนโทรลในเว็บฟอร์ม สำหรับค่าใน View State นี้ บางครั้งอาจถูกแก้ไขโดยแฮกเกอร์ได้ เพื่อมีเจตนาที่ไม่ดีบางอย่าง ในบทถัดไปจะได้เรียนรู้ถึงวิธีการป้องกัน การแก้ไขข้อมูลใน View State

ขั้นตอนที่ 4 โหลด Post Back Data
จะเกิดเมื่อเว็บฟอร์มมีการ Post back เท่านั้น ขั้นตอนนี้เว็บฟอร์ม จะทำการโหลดค่าจาก HTTP POST Headers แล้วส่งต่อค่าที่เหมาะสมให้กับเซิร์ฟเวอร์คอนโทรลแต่ละตัวที่ทำการอิมพลีเมนต์อินเตอร์เฟส IPostBackDataHandler หลังจากนั้นเซิร์ฟเวอร์คอนโทรลจะทำการเรียกเมธอด LoadPostData เพื่อดึงค่าที่เว็บฟอร์มส่งให้ไปกำหนดพร็อพเพอตี้ Text ให้ตัวเอง

ขั้นตอนที่ 5 Load
เมธอดนี้เป็นของเว็บฟอร์ม ซึ่งนักพัฒนาเว็บจะรู้จักเป็นอย่างดี เหตุการณ์นี้ตรงกับเหตุการณ์ในโพรซีเยอร์ Page_Load ขั้นตอนนี้จะถูกเรียกทั้งตอนที่มีการ Post Back และไม่มีการ Post Back

ขั้นตอนที่ 6 Raise Post Back Event
เป็นเหตุการณ์ที่เกิดกับคอนโทรลที่มีความสามารถในการ Post Back ได้เช่น เหตุการณ์ Click ของ Button เหตุการณ์ TextChanged ของคอนโทรล TextBox คอนโทรลที่สามารถสร้างการ Post Back ได้นั้นต้องมีการอิมพลีเมนต์อินเตอร์เฟส IPostBackDataHandler ที่เราได้รู้จักกันไปแล้ว

ขั้นตอนที่ 7 Save View State
ขั้นตอนนี้เว็บฟอร์มจะเรียกเมธอด SaveViewState ของคอนโทรลแต่ละตัวที่อยู่ภายใต้เว็บฟอร์มตามลำดับชั้น เพื่อทำการบันทึกสถานะของคอนโทรลล่าสุดที่อาจมีการการเปลี่ยนแปลงไป เนื่องจากขั้นตอนก่อนหน้านี้ ผลของการบันทึกนี้จะถูกเก็บอยู่ในรูปตัวหนังสือที่เข้ารหัสแบบ Base-64 แล้วเก็บใน Hidden Field ที่จะถูกสร้างในขั้นตอนถัดไป

ขั้นตอนที่ 8 Render
ขั้นตอนนี้ เว็บฟอร์มจะทำการแปลงข้อมูลในขั้นตอนที่ผ่านมาออกมาในรูปภาษา HTML เพื่อส่งต่อให้กับไคลเอนต์ ในขั้นตอนนี้เว็บฟอร์มจะเรียกเมธอด RenderControl ของคอนโทรลแต่ละตัวที่อยู่ภายใต้เว็บฟอร์มตามลำดับชั้น สำหรับ

credit : คุณชาย
http://kunchanprogramser.blogspot.com/2 ... spnet.html