อะไรทำไมหรือเมื่อใดจึงควรเลือก cshtml vs aspx


108

ฉันต้องการทราบว่าอะไรทำไมหรือเมื่อใดจึงดีกว่าที่จะเลือก cshtml และอะไรทำไมหรือเมื่อใดจึงดีกว่าที่จะเลือกเทคโนโลยี aspx เทคโนโลยีทั้งสองนี้มีไว้เพื่ออะไร?

ขอบคุณ,


ฉันไม่คิดว่าฉันเคยเห็นไฟล์ cshtml จากที่ใดในเว็บไซต์ microsoft.com
user34660

@ user34660 คุณจะทราบได้อย่างไรว่าเป็น cshtml หรือ aspx ส่วนขยายถูกปกปิด
Sajuuk

คำตอบ:


111

ตามที่คนอื่น ๆ ตอบ.cshtml(หรือ.vbhtmlถ้านั่นคือรสชาติของคุณ) มีการทำแผนที่ตัวจัดการเพื่อโหลดเอ็นจิ้น MVC .aspxขยายเพียงแค่โหลด aspnet_isapi.dll ที่ดำเนินการรวบรวมและให้บริการขึ้นรูปแบบเว็บ ความแตกต่างในการทำแผนที่ตัวจัดการเป็นเพียงวิธีการอนุญาตให้ทั้งสองอยู่ร่วมกันบนเซิร์ฟเวอร์เดียวกันทำให้ทั้งแอปพลิเคชัน MVC และแอปพลิเคชัน WebForms สามารถใช้งานได้ภายใต้รูททั่วไป

สิ่งนี้ช่วยให้http://www.mydomain.com/MyMVCApplicationถูกต้องและให้บริการด้วยกฎ MVC พร้อมกับhttp://www.mydomain.com/MyWebFormsApplicationเป็นเว็บฟอร์มมาตรฐาน

แก้ไข:
สำหรับความแตกต่างในเทคโนโลยีเฟรมเวิร์กเทมเพลต MVC (Razor) มีวัตถุประสงค์เพื่อส่งคืนหน้า. Net ไปยังแพลตฟอร์ม "บนเว็บ" ที่น่ารังเกียจยิ่งขึ้นของมุมมองเทมเพลตที่แยกตรรกะของรหัสระหว่างโมเดล (วัตถุทางธุรกิจ / ข้อมูล) , มุมมอง (สิ่งที่ผู้ใช้เห็น) และตัวควบคุม (การเชื่อมต่อระหว่างทั้งสอง) แบบจำลอง WebForms (aspx) เป็นความพยายามของ Microsoft ในการใช้การฝังจาวาสคริปต์ที่ซับซ้อนเพื่อจำลองแอปพลิเคชันที่มีสถานะคล้ายกับแอปพลิเคชัน WinForms พร้อมด้วยเหตุการณ์และวงจรชีวิตของเพจที่จะสามารถรักษาสถานะของตัวเองจากหน้าหนึ่งไปอีกหน้าหนึ่งได้

การเลือกใช้อย่างใดอย่างหนึ่งมักจะเป็นที่ถกเถียงกันอยู่เสมอเนื่องจากมีข้อโต้แย้งเกี่ยวกับทั้งสองระบบ ฉันชอบความเรียบง่ายในสถาปัตยกรรม MVC (แม้ว่าการกำหนดเส้นทางจะเป็นอะไรก็ได้ แต่ก็เรียบง่าย) และความง่ายของไวยากรณ์ของ Razor ฉันรู้สึกว่าสถาปัตยกรรม WebForms นั้นหนักเกินไปที่จะเป็นแพลตฟอร์มเว็บที่มีประสิทธิภาพ ดังที่กล่าวมามีหลายกรณีที่เฟรมเวิร์ก WebForms มีรูปแบบที่กระชับและใช้งานได้พร้อมโครงสร้างเหตุการณ์ที่หลากหลายซึ่งได้รับการกำหนดไว้อย่างดี ทุกอย่างขึ้นอยู่กับความต้องการของแอปพลิเคชันและความต้องการของผู้สร้าง


11
+1 นั่นเป็นจุดสำคัญเกี่ยวกับความแตกต่างระหว่างจุดมุ่งหมายของ ASP.NET Web Form ในการสร้างสภาพแวดล้อมที่มีสถานะสำหรับเว็บไร้สัญชาติ
smartcaveman

ข้อได้เปรียบที่สำคัญอย่างหนึ่งของ aspx เมื่อเทียบกับ cshtml คือคุณสามารถดูและแก้ไขเพจได้เอง (ประเภท WUSIWYG) โดยใช้แท็บออกแบบ ด้วยไฟล์ cshtml คุณอาจใช้ notepad เพื่อแก้ไขหน้า html ของคุณได้เช่นกัน คุณกำลังทำงาน "ในความมืด"
nivs1978

@ nivs1978: ฉันพบว่านี่เป็นด้านลบของมันจริงๆ นักพัฒนาจำนวนมากเกินไปที่ใช้สิ่งนี้เป็นไม้ค้ำยันในการเขียนมาร์กอัปที่เลอะเทอะ ในท้ายที่สุดนักออกแบบสามารถแสดงหน้าเว็บเวอร์ชัน "เกือบ" ให้คุณเห็นเท่านั้นเนื่องจากจะแสดงผลมุมมองด้วย "เบราว์เซอร์" ภายในของตัวเองเท่านั้น แม้ว่าคุณจะเข้าใจวิธีการแสดงเพจทั่วไป แต่คุณยังไม่สามารถทราบได้จนกว่าจะแสดงผลในเบราว์เซอร์จริง
Joel Etherton

44

มีดโกนเป็นเครื่องมือมุมมองสำหรับ ASP.NET MVC และยังเป็นแม่แบบเครื่องยนต์ รหัสมีดโกนและโค้ดอินไลน์ ASP.NET (รหัสผสมกับมาร์กอัป) ทั้งสองได้รับการคอมไพล์ก่อนและกลายเป็นแอสเซมบลีชั่วคราวก่อนที่จะดำเนินการ ดังนั้นเช่นเดียวกับ C # และ VB.NET ทั้งสองคอมไพล์เป็น IL ซึ่งทำให้เปลี่ยนได้รหัส Razor และ Inline สามารถเปลี่ยนกันได้

ดังนั้นจึงเป็นเรื่องของรูปแบบและความสนใจมากกว่า ฉันสบายใจกับมีดโกนมากกว่ารหัสอินไลน์ ASP.NET นั่นคือฉันชอบหน้า Razor (cshtml) เป็นหน้า. aspx

ลองนึกภาพว่าคุณอยากได้Humanชั้นเรียนแล้วแสดงผล ในไฟล์cshtml ที่คุณเขียน:

<div>Name is @Model.Name</div>

ขณะอยู่ในไฟล์aspx ที่คุณเขียน:

<div>Name is <%= Human.Name %></div>

อย่างที่คุณเห็น@สัญลักษณ์ของมีดโกนทำให้การผสมรหัสและมาร์กอัปง่ายขึ้นมาก


6
@ MikaëlMayerใน Razor Modelใช้สำหรับมุมมองที่พิมพ์มากซึ่งคุณกำหนดประเภทของคุณที่ด้านบนโดยใช้modelคำสำคัญ
Saeed Neamati

คำถามเล็ก ๆ สำหรับคุณ @SaeedNeamati ...... สมมติว่าเรากำลังสร้างเว็บแอปพลิเคชันเพื่อใช้ SOAP webAPI แบบไมโครเซอร์วิสที่ซับซ้อน .... ในสถานการณ์นี้คือ asp.net mvc aspx หรือ mvc cshtml จะดีกว่าที่จะใช้ . โดยส่วนตัวแล้วฉันรู้สึกว่าไวยากรณ์ cshtml ง่ายขึ้น
codemilan

คำตอบที่ดี ... คำตอบนี้เข้าใจง่ายกว่ามาก ... อย่างน้อยสำหรับผู้เริ่มต้นเช่นฉัน :)
eRaisedToX

10

แม้ว่าไวยากรณ์จะแตกต่างกันอย่างแน่นอนระหว่าง Razor ( .cshtml/ .vbhtml) และ WebForms ( .aspx/ .ascx) แต่ (Razor มีความกระชับและทันสมัยกว่า) แต่ก็ไม่มีใครพูดถึงว่าในขณะที่ทั้งสองสามารถใช้เป็น View Engines / Templating Engines, ASP.NET แบบดั้งเดิม สามารถใช้ตัวควบคุมฟอร์มเว็บบนไฟล์. aspx หรือ. ascx ใด ๆ (แม้จะทำงานร่วมกันกับสถาปัตยกรรม MVC)

สิ่งนี้เกี่ยวข้องในสถานการณ์ที่มีการสร้างแนวทางแก้ไขปัญหาที่ยาวนานและรวมอยู่ในส่วนประกอบที่เสียบได้ (เช่นการควบคุมการอัปโหลดไฟล์ขนาดใหญ่) และคุณต้องการใช้ในไซต์ MVC ด้วย Razor คุณไม่สามารถทำสิ่งนี้ได้ อย่างไรก็ตามคุณสามารถดำเนินการประมวลผลแบ็กเอนด์เดียวกันทั้งหมดที่คุณจะใช้กับสถาปัตยกรรม ASP.NET แบบเดิมด้วยมุมมองแบบฟอร์มเว็บ

นอกจากนี้มุมมองเว็บฟอร์ม ASP.NET สามารถมีไฟล์ Code-Behind ซึ่งช่วยให้การฝังลอจิกลงในไฟล์แยกต่างหากที่รวบรวมพร้อมกับมุมมอง ในขณะที่ชุมชนการพัฒนาซอฟต์แวร์กำลังเติบโตขึ้นโดยมองว่าสถาปัตยกรรมคู่กันอย่างแน่นหนาและรูปแบบไคลเอนต์สมาร์ทเป็นแนวทางปฏิบัติที่ไม่ดีแต่ก็เคยเป็นวิธีหลักในการทำสิ่งต่างๆและยังคงเป็นไปได้มากกับไฟล์. aspx / .ascx มีดโกนโดยเจตนาไม่มีคุณภาพดังกล่าว


ตอนที่ฉันเริ่มเขียนนั้นโจเอลยังไม่ได้ทำการแก้ไข แต่ฉันจะทิ้งมันไว้เผื่อว่าจะมีคนเห็นว่ามันเป็นประโยชน์
smartcaveman

4

ไฟล์ Cshtml เป็นไฟล์ที่ Razor ใช้และตามที่ระบุไว้เป็นคำตอบสำหรับคำถามนี้ข้อได้เปรียบหลักคือสามารถแสดงผลในการทดสอบหน่วย คำตอบที่หลากหลายสำหรับหัวข้ออื่น ๆ นี้จะนำมาซึ่งประเด็นที่น่าสนใจอื่น ๆ มากมาย

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