'หน้าวงจรชีวิต' ของหน้า ASP.NET MVC คืออะไรเมื่อเปรียบเทียบกับ ASP.NET WebForms


158

'หน้าวงจรชีวิต' ของหน้า ASP.NET MVC คืออะไรเมื่อเปรียบเทียบกับ ASP.NET WebForms

ฉันพยายามที่จะเข้าใจคำถาม 'ง่าย' นี้ดีขึ้นเพื่อกำหนดว่าหน้าเว็บที่ฉันมีอยู่ในไซต์ง่าย ๆ (มาก) สามารถแปลงได้อย่างง่ายดายจาก ASP.NET WebForms หรือไม่

อาจเป็น 'การแปลง' ของกระบวนการด้านล่างหรือวงจรชีวิตทางเลือกจะเป็นสิ่งที่ฉันกำลังมองหา

สิ่งที่ฉันกำลังทำอยู่:

(ใช่ฉันรู้ว่าทุกคนสามารถตอบคำถามของฉันได้รู้ทั้งหมดนี้ - ฉันแค่พยายามลองเปรียบเทียบ 'วงจรชีวิต' ดังนั้นฉันคิดว่าฉันจะเริ่มด้วยการกรอกสิ่งที่เรารู้แล้วทั้งหมด)

แสดงผลหน้า:

  • ฉันมีเพจต้นแบบที่มีแม่แบบพื้นฐานของฉัน
  • ฉันมีหน้าเนื้อหาที่ให้ชื่อภูมิภาคกับฉันจากหน้าต้นแบบที่ฉันใส่เนื้อหา
  • ในตัวจัดการเหตุการณ์สำหรับแต่ละหน้าเนื้อหาฉันโหลดข้อมูลจากฐานข้อมูล (ส่วนใหญ่เป็นแบบอ่านอย่างเดียว)
  • ฉันผูกข้อมูลนี้เข้ากับการควบคุม ASP.NET ซึ่งเป็นตัวแทนของกริด, ดรอปดาวน์หรือตัวทำซ้ำ ข้อมูลนี้มีชีวิตอยู่ภายใน HTML ที่สร้างขึ้น บางส่วนเข้าไปใน ViewState (แต่ฉันจะไม่เข้าไปมากเกินไป!)
  • ฉันตั้งค่าคุณสมบัติหรือผูกข้อมูลกับบางรายการเช่นตัวควบคุมรูปภาพหรือกล่องข้อความบนหน้า
  • หน้าถูกส่งไปยังลูกค้าที่แสดงผลเป็น HTML ที่ไม่สามารถใช้ซ้ำได้
  • ฉันพยายามหลีกเลี่ยงการใช้ ViewState นอกเหนือจากที่หน้าต้องการเป็นขั้นต่ำ

ฝั่งไคลเอ็นต์ (ไม่ได้ใช้ ASP.NET AJAX):

  • ฉันอาจใช้ JQuery และเทคนิคที่น่ารังเกียจบางอย่างเพื่อค้นหาการควบคุมในหน้าและดำเนินการกับพวกเขา
  • หากผู้ใช้เลือกจากดรอปดาวน์ - โพสต์จะถูกสร้างขึ้นซึ่งก่อให้เกิดเหตุการณ์ C # ใน codebehind ของฉัน เหตุการณ์นี้อาจไปที่ฐานข้อมูล แต่สิ่งที่มันทำหน้า HTML ที่สร้างขึ้นใหม่ทั้งหมดจบลงด้วยการส่งกลับไปยังลูกค้า
  • ฉันอาจใช้ Page.Session เพื่อจัดเก็บคู่ของค่าคีย์ที่ฉันต้องนำมาใช้ใหม่ในภายหลัง

ดังนั้นด้วย MVC วิธีนี้ 'วงจรชีวิต' จะเปลี่ยนไปอย่างไร


2
อ้างอิงจากการบุ๊กของฉันที่เน้นวิธีการที่ท่อส่งคำขอทำงานใน ASP.NET MVC ซึ่งโดยทั่วไปจะเป็นประโยชน์ 1. เพื่อทำความเข้าใจ ASP.NET MVC เอง 2. เพื่อทำความเข้าใจว่าอะไรคือจุดฉีดที่แตกต่างกันซึ่งจัดทำโดย MVC และเพื่อทำความเข้าใจ https://docs.google.com/open?id=0B0_EIyBZvSQsOTU3N2Q2NDEtMWNjMS00ZTc0LWJmMjUtM2I0M2I5NDY2ZDNl [ simple-talk.com/content/article.aspx?article=1358](https://...
humblelistener

รอบหน้ามีดังนี้: [ stackoverflow.com/questions/15066770/… [1]: stackoverflow.com/questions/15066770/…
Insan

รอบหน้ามีดังนี้: stackoverflow.com/questions/15066770/ …
Insan

คำตอบ:


39

ฉันจะพยายามแสดงความคิดเห็นในแต่ละหัวข้อย่อยที่คุณกล่าวถึง:

หน้าต้นแบบของคุณยังคงอยู่ใน MVC และใช้เพื่อจัดรูปแบบที่สอดคล้องกับไซต์ ไม่ค่อยมีอะไรใหม่

หน้าเนื้อหาของคุณจะกลายเป็นมุมมองในโลก MVC พวกเขายังคงให้พื้นที่เนื้อหาเดียวกันกับหน้าต้นแบบของคุณ

ไม่ควรใช้การจัดการเหตุการณ์ของเว็บฟอร์มใน MVC แทนคลาสตัวควบคุมของคุณและวิธีการกระทำของพวกเขาจะจัดการกับการโหลดข้อมูลของคุณเป็น "แบบจำลอง" ที่ส่งผ่านไปยังมุมมอง

แม้ว่า databinding สไตล์เว็บฟอร์มนั้นเป็นไปได้ใน MVC แต่ฉันพบว่ามันไม่ใช่ทางออกที่ดีที่สุด ดีกว่าที่จะวางข้อมูลของคุณในคลาสโมเดลและพิมพ์มุมมองของคุณอย่างแรงเพื่อให้คุณสามารถเข้าถึงโมเดลนั้นได้โดยตรง จากนั้นเป็นเพียงเรื่องของการใช้<%= ViewData.Model.SomeProperty %>ไวยากรณ์ในการเข้าถึงข้อมูลของคุณและแสดงในตำแหน่งที่ต้องการ สำหรับมุมมองคำแนะนำของฉันคือการลืมว่ามันยังมีอยู่

จำไว้ว่าข้อดีอย่างหนึ่งของการใช้ MVC ก็คือคุณสามารถควบคุม HTML ที่คุณส่งให้ลูกค้าได้ ยอมรับพลังนั้นและลองค้นหาวิธีแก้ไขที่ช่วยให้คุณรักษาการควบคุมนั้นไว้ได้ การควบคุม Webform พยายามซ่อน html จากคุณและทำให้ยากต่อการปรับแต่ง html เมื่อคุณต้องการ

ฉันขอแนะนำ JQuery หรือหนึ่งในไลบรารี่จาวาสคริปต์ที่มีประสิทธิภาพในทำนองเดียวกัน แต่เรียนรู้ที่จะใช้พวกเขาในการเข้าถึง HTML DOM โดยตรงและหลีกเลี่ยงปัญหาเกี่ยวกับการควบคุมเว็บฟอร์ม

คุณสามารถใช้ jquery เพื่อขอเกี่ยวกับการเลือกแบบหล่นลงในฝั่งไคลเอ็นต์และส่งคำขอสไตล์มาตรฐานหรืออาแจ็กซ์ คำขอเหล่านั้นสามารถส่งคืนหน้าใหม่เปลี่ยนเส้นทางชิ้นส่วน html หรือแม้แต่ข้อมูล JSON ที่สามารถใช้เพื่ออัปเดตหน้าเดิมได้

เซสชัน asp.net สามารถใช้งานได้ตามต้องการ


ขอบคุณสำหรับคำตอบของคุณ จริง ๆ แล้ว JQuery ทำให้ฉันต้องกลับมาที่ MVC ฉันดูสั้น ๆ แล้วไล่ออก (อย่างน้อยตอนนี้) เล่นกับ JQuery และพยายามที่จะเพียงแค่หาสิ่งที่อยู่ใน DOM ได้รับมากเกินไปของความเจ็บปวดดังนั้นฉันคิดว่าฉันพยายามที่จะกลับมา MVC และเรียนรู้เพิ่มเติม
Simon_Weaver

หน้า MVC มีคุณสมบัติในการเข้าถึงรูปแบบที่คุณไม่ต้องไปผ่านModel ViewData
Tsahi Asher
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.