Điều gì, tại sao hoặc khi nào thì tốt hơn nên chọn cshtml so với aspx?


108

Tôi muốn biết điều gì, tại sao hoặc khi nào tốt hơn nên chọn cshtml và cái gì, tại sao hoặc khi nào tốt hơn nên chọn công nghệ aspx? Hai công nghệ này nhằm mục đích gì?

Cảm ơn bạn,


Tôi không nghĩ rằng tôi đã thấy các tệp cshtml ở bất kỳ đâu trong trang web microsoft.com.
user34660 14/09/17

@ user34660 làm cách nào để xác định đó là cshtml hay aspx? phần mở rộng được che giấu.
Sajuuk

Câu trả lời:


111

Như những người khác đã trả lời, .cshtml(hoặc .vbhtmlnếu đó là hương vị của bạn) cung cấp ánh xạ xử lý để tải động cơ MVC. Phần .aspxmở rộng chỉ cần tải aspnet_isapi.dll thực hiện biên dịch và phục vụ các biểu mẫu web. Sự khác biệt trong ánh xạ trình xử lý chỉ đơn giản là một phương pháp cho phép cả hai cùng tồn tại trên cùng một máy chủ, cho phép cả ứng dụng MVC và ứng dụng WebForms sống dưới một gốc chung.

Điều này cho phép http://www.mydomain.com/MyMVCApplication hợp lệ và được cung cấp với các quy tắc MVC cùng với http://www.mydomain.com/MyWebFormsApplication hợp lệ như một biểu mẫu web chuẩn.

Chỉnh sửa:
Đối với sự khác biệt trong các công nghệ, khuôn khổ tạo khuôn mẫu MVC (Razor) nhằm mục đích trả lại các trang .Net về một nền tảng "dựa trên web" RESTful hơn với các chế độ xem mẫu phân tách logic mã giữa mô hình (đối tượng kinh doanh / dữ liệu) , khung nhìn (những gì người dùng nhìn thấy) và bộ điều khiển (kết nối giữa hai thứ này). Mô hình WebForms (aspx) là một nỗ lực của Microsoft nhằm sử dụng tính năng nhúng javascript phức tạp để mô phỏng một ứng dụng trạng thái hơn tương tự như ứng dụng WinForms hoàn chỉnh với các sự kiện và vòng đời trang có khả năng giữ lại trạng thái của chính nó từ trang này sang trang khác.

Lựa chọn sử dụng cái này hay cái kia sẽ luôn là một lựa chọn gây tranh cãi vì có những lập luận ủng hộ và chống lại cả hai hệ thống. Tôi cho một người thích sự đơn giản trong kiến ​​trúc MVC (mặc dù định tuyến là bất cứ điều gì nhưng đơn giản) và sự dễ dàng của cú pháp Razor. Tôi cảm thấy kiến ​​trúc WebForms quá nặng để trở thành một nền tảng web hiệu quả. Nói như vậy, có rất nhiều trường hợp mà khung công tác WebForms cung cấp một mô hình rất ngắn gọn và có thể sử dụng được với cấu trúc sự kiện phong phú được xác định rõ ràng. Tất cả đều phụ thuộc vào nhu cầu của ứng dụng và sở thích của những người xây dựng nó.


11
+1, Đó là một điểm quan trọng về sự khác biệt giữa ASP.NET Web Form nhằm mục đích tạo ra một môi trường trạng thái cho web không trạng thái.
smartcaveman

Một lợi thế chính của aspx so với cshtml là bạn có thể xem và chỉnh sửa chính trang đó (loại WUSIWYG) bằng cách sử dụng tab thiết kế. Với các tệp cshtml, bạn cũng có thể sử dụng notepad để chỉnh sửa trang html của mình. Bạn đang làm việc "trong bóng tối".
nivs1978,

@ nivs1978: Tôi thực sự thấy đây là một mặt trái của nó. Quá nhiều nhà phát triển sử dụng điều này như một cái nạng để viết đánh dấu cẩu thả. Cuối cùng, trình thiết kế chỉ có khả năng hiển thị cho bạn phiên bản "gần như" của trang vì nó sẽ chỉ hiển thị chế độ xem bằng "trình duyệt" nội bộ của chính nó. Mặc dù bạn có thể hiểu được một trang sẽ hiển thị như thế nào, nhưng bạn vẫn không thể biết được cho đến khi nó được hiển thị trong một trình duyệt thực sự.
Joel Etherton

44

Razor là một công cụ xem cho ASP.NET MVC và cũng là một công cụ mẫu . Mã dao cạo và mã nội tuyến ASP.NET (mã trộn với đánh dấu) đều được biên dịch trước và được chuyển thành một tập hợp tạm thời trước khi được thực thi. Do đó, giống như C # và VB.NET đều biên dịch thành IL, điều này làm cho chúng có thể hoán đổi cho nhau, mã Razor và nội tuyến đều có thể hoán đổi cho nhau.

Do đó, vấn đề nhiều hơn là phong cách và sở thích. Tôi cảm thấy thoải mái hơn với dao cạo, thay vì mã nội tuyến ASP.NET, tức là tôi thích các trang Razor (cshtml) hơn các trang .aspx.

Hãy tưởng tượng rằng bạn muốn nhận một Humanlớp học và hiển thị nó. Trong các tệp cshtml bạn viết:

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

Khi ở trong tệp aspx bạn viết:

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

Như bạn có thể thấy, @dấu hiệu của dao cạo giúp trộn mã và đánh dấu dễ dàng hơn nhiều.


6
@ MikaëlMayer, trong Razor, Modelđược sử dụng cho các chế độ xem được đánh máy mạnh, trong đó bạn xác định loại của mình ở trên cùng bằng cách sử dụng modeltừ khóa.
Saeed Neamati

Một câu hỏi nhỏ dành cho bạn @SaeedNeamati ...... Giả sử chúng tôi đang xây dựng một ứng dụng web để sử dụng webAPI SOAP dựa trên các dịch vụ vi mô phức tạp .... trong trường hợp này, sử dụng asp.net mvc aspx hay mvc cshtml là tốt hơn . Cá nhân tôi cảm thấy cú pháp cshtml dễ dàng hơn.
codemilan

Nice câu trả lời ... câu trả lời này là đơn giản hơn nhiều để hiểu ..., ít nhất là cho người mới bắt đầu như tôi :)
eRaisedToX

10

Mặc dù cú pháp chắc chắn là khác nhau giữa Razor ( .cshtml/ .vbhtml) và WebForms ( .aspx/ .ascx), (Razor ngắn gọn hơn và hiện đại hơn trong số hai), chưa ai đề cập đến điều đó trong khi cả hai đều có thể được sử dụng như View Engine / Templating Engines, ASP.NET truyền thống Điều khiển Biểu mẫu Web có thể được sử dụng trên bất kỳ tệp .aspx hoặc .ascx nào, (ngay cả khi gắn kết với kiến ​​trúc MVC).

Điều này có liên quan trong các tình huống mà các giải pháp lâu dài cho một vấn đề đã được thiết lập và đóng gói thành một thành phần có thể cắm được (ví dụ: điều khiển tải lên tệp lớn) và bạn muốn sử dụng nó trong một trang web MVC. Với Razor, bạn không thể làm điều này. Tuy nhiên, bạn có thể thực thi tất cả cùng một quá trình xử lý phụ trợ mà bạn sẽ sử dụng với kiến ​​trúc ASP.NET truyền thống với dạng xem Biểu mẫu Web.

Hơn nữa, các dạng xem biểu mẫu web ASP.NET có thể có các tệp Code-Behind, cho phép nhúng logic vào một tệp riêng biệt được biên dịch cùng với dạng xem. Mặc dù cộng đồng phát triển phần mềm ngày càng phát triển để coi các kiến ​​trúc được kết hợp chặt chẽ và mô hình Smart Client là phương pháp không tốt , nhưng nó từng là cách hoạt động chính và vẫn rất khả thi với các tệp .aspx / .ascx. Dao cạo, cố ý, không có chất lượng như vậy.


Khi tôi bắt đầu viết rằng, Joel đã không được thực hiện chỉnh sửa của mình, nhưng tôi sẽ để nó trong trường hợp phát hiện một người nào đó nó hữu ích
smartcaveman

4

Các tệp Cshtml là những tệp được Razor sử dụng và như đã nêu là câu trả lời cho câu hỏi này , lợi thế chính của chúng là chúng có thể được hiển thị bên trong các bài kiểm tra đơn vị. Các câu trả lời đa dạng cho chủ đề này khác sẽ mang lại rất nhiều điểm thú vị khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.