Công cụ xem ASP.NET MVC (Cộng đồng Wiki)
Vì một danh sách toàn diện dường như không tồn tại, hãy bắt đầu một danh sách ở đây trên SO. Điều này có thể có giá trị lớn đối với cộng đồng ASP.NET MVC nếu mọi người thêm kinh nghiệm của họ (đặc biệt là bất kỳ ai đã đóng góp cho một trong số này). Bất cứ điều gì thực hiện IViewEngine
(ví dụ VirtualPathProviderViewEngine
) là trò chơi công bằng ở đây. Chỉ cần sắp xếp theo thứ tự bảng chữ cái Công cụ xem mới (để WebFormViewEngine và Dao cạo ở trên cùng) và cố gắng trở thành mục tiêu so sánh.
System.Web.Mvc.WebFormViewEngine
Mục tiêu thiết kế:
Công cụ xem được sử dụng để hiển thị trang Web Forms để phản hồi.
Ưu điểm:
- có mặt khắp nơi vì nó xuất xưởng với ASP.NET MVC
- kinh nghiệm quen thuộc cho các nhà phát triển ASP.NET
- IntelliSense
- có thể chọn bất kỳ ngôn ngữ nào với nhà cung cấp CodeDom (ví dụ: C #, VB.NET, F #, Boo, Nemerle)
- biên soạn theo yêu cầu hoặc các khung nhìn được biên dịch trước
Nhược điểm:
- việc sử dụng bị nhầm lẫn bởi sự tồn tại của các mẫu "ASP.NET cổ điển" không còn áp dụng trong MVC (ví dụ: ViewState PostBack)
- có thể góp phần chống mô hình "canh thẻ"
- Cú pháp khối mã và gõ mạnh có thể cản trở
- IntelliSense thi hành kiểu không phải lúc nào cũng phù hợp với các khối mã nội tuyến
- có thể gây ồn ào khi thiết kế các mẫu đơn giản
Thí dụ:
<%@ Control Inherits="System.Web.Mvc.ViewPage<IEnumerable<Product>>" %>
<% if(model.Any()) { %>
<ul>
<% foreach(var p in model){%>
<li><%=p.Name%></li>
<%}%>
</ul>
<%}else{%>
<p>No products available</p>
<%}%>
System.Web.Razor
Mục tiêu thiết kế:
Ưu điểm:
- Nhỏ gọn, biểu cảm và chất lỏng
- Dễ học
- Không phải là một ngôn ngữ mới
- Có Intellisense tuyệt vời
- Đơn vị kiểm tra
- Đặc biệt, xuất xưởng với ASP.NET MVC
Nhược điểm:
- Tạo ra một vấn đề hơi khác với "súp tag" được tham chiếu ở trên. Trường hợp các thẻ máy chủ thực sự cung cấp cấu trúc xung quanh mã máy chủ và không phải máy chủ, Razor nhầm lẫn mã HTML và mã máy chủ, khiến việc phát triển HTML hoặc JS thuần túy trở nên khó khăn (xem Ví dụ số 1) khi bạn phải "thoát" HTML và / hoặc JavaScript thẻ trong một số điều kiện rất phổ biến.
- Đóng gói kém + khả năng sử dụng lại: Việc gọi một mẫu dao cạo như thể đó là một phương pháp bình thường - trong thực tế, dao cạo có thể gọi mã nhưng ngược lại, có thể khuyến khích trộn mã và trình bày.
- Cú pháp rất định hướng html; tạo nội dung không phải html có thể khó. Mặc dù vậy, mô hình dữ liệu của dao cạo về cơ bản chỉ là nối chuỗi, do đó lỗi cú pháp và lồng không được phát hiện tĩnh hoặc động, mặc dù thời gian thiết kế của VS.NET giúp giảm thiểu phần nào điều này. Khả năng bảo trì và tái cấu trúc có thể bị ảnh hưởng do điều này.
Không có tài liệu API , http://msdn.microsoft.com/en-us/l Library / system.web.razor.aspx
Ví dụ số 1 (chú ý vị trí của "chuỗi [] ..."):
@{
<h3>Team Members</h3> string[] teamMembers = {"Matt", "Joanne", "Robert"};
foreach (var person in teamMembers)
{
<p>@person</p>
}
}
Thành phố
Mục tiêu thiết kế:
- Tôn trọng HTML là ngôn ngữ hạng nhất thay vì coi nó là "chỉ văn bản".
- Đừng gây rối với HTML của tôi! Mã ràng buộc dữ liệu (mã Bellevue) phải tách biệt với HTML.
- Thực thi tách biệt Model-View
Brail
Mục tiêu thiết kế:
Công cụ xem Brail đã được chuyển từ MonoRail để hoạt động với Microsoft ASP.NET MVC Framework. Để biết giới thiệu về Brail, xem tài liệu trên trang web của dự án Castle .
Ưu điểm:
- được mô phỏng theo "cú pháp python thân thiện với cổ tay"
- Lượt xem được biên dịch theo yêu cầu (nhưng không có tiền biên dịch)
Nhược điểm:
- được thiết kế để được viết bằng ngôn ngữ Boo
Thí dụ:
<html>
<head>
<title>${title}</title>
</head>
<body>
<p>The following items are in the list:</p>
<ul><%for element in list: output "<li>${element}</li>"%></ul>
<p>I hope that you would like Brail</p>
</body>
</html>
Hasic
Hasic sử dụng các chữ XML của VB.NET thay vì các chuỗi như hầu hết các công cụ xem khác.
Ưu điểm:
- Kiểm tra thời gian biên dịch XML hợp lệ
- Tô màu cú pháp
- Toàn bộ nội dung
- Tổng hợp quan điểm
- Khả năng mở rộng bằng cách sử dụng các lớp CLR thông thường, các hàm, v.v.
- Khả năng kết hợp và thao tác liền mạch vì mã VB.NET thông thường
- Đơn vị kiểm tra
Nhược điểm:
- Hiệu suất: Xây dựng toàn bộ DOM trước khi gửi cho khách hàng.
Thí dụ:
Protected Overrides Function Body() As XElement
Return _
<body>
<h1>Hello, World</h1>
</body>
End Function
NDjango
Mục tiêu thiết kế:
NDjango là một triển khai của
Ngôn ngữ Mẫu Django trên nền tảng .NET, sử dụng ngôn ngữ F # .
Ưu điểm:
NHam
Mục tiêu thiết kế:
Cổng .NET của Rails Haml xem công cụ. Từ trang web của Haml :
Haml là ngôn ngữ đánh dấu được sử dụng để mô tả rõ ràng và đơn giản XHTML của bất kỳ tài liệu web nào, không sử dụng mã nội tuyến ... Haml tránh sự cần thiết phải mã hóa rõ ràng XHTML vào mẫu, bởi vì đây thực sự là một mô tả trừu tượng về XHTML , với một số mã để tạo nội dung động.
Ưu điểm:
- cấu trúc terse (tức là DRY)
- thụt lề tốt
- cấu trúc rõ ràng
- C # Intellisense (dành cho VS2008 không có ReSharper)
Nhược điểm:
- sự trừu tượng hóa từ XHTML thay vì tận dụng sự quen thuộc của đánh dấu
- Không có Intellisense cho VS2010
Thí dụ:
@type=IEnumerable<Product>
- if(model.Any())
%ul
- foreach (var p in model)
%li= p.Name
- else
%p No products available
NVelocityViewEngine (MvcContrib)
Mục tiêu thiết kế:
Một công cụ xem dựa trên
NVelocity là cổng .NET của Vận tốc dự án Java phổ biến
.
Ưu điểm:
- dễ đọc / viết
- mã xem ngắn gọn
Nhược điểm:
- số lượng hạn chế của các phương thức trợ giúp có sẵn trên màn hình
- không tự động có tích hợp Visual Studio (IntelliSense, kiểm tra thời gian biên dịch hoặc tái cấu trúc)
Thí dụ:
#foreach ($p in $viewdata.Model)
#beforeall
<ul>
#each
<li>$p.Name</li>
#afterall
</ul>
#nodata
<p>No products available</p>
#end
SharpTiles
Mục tiêu thiết kế:
SharpTiles là một phần của JSTL
kết hợp với khái niệm đằng sau khung Gạch (kể từ Mile đá 1).
Ưu điểm:
- quen thuộc với các nhà phát triển Java
- Các khối mã kiểu XML
Nhược điểm:
Thí dụ:
<c:if test="${not fn:empty(Page.Tiles)}">
<p class="note">
<fmt:message key="page.tilesSupport"/>
</p>
</c:if>
Động cơ Spark View
Mục tiêu thiết kế:
Ý tưởng là cho phép html thống trị luồng và mã phù hợp liền mạch.
Ưu điểm:
- Sản xuất các mẫu dễ đọc hơn
- C # Intellisense (dành cho VS2008 không có ReSharper)
- Trình cắm SparkSense cho VS2010 (hoạt động với ReSharper)
- Cung cấp tính năng Bindings mạnh mẽ để loại bỏ tất cả mã trong chế độ xem của bạn và cho phép bạn dễ dàng phát minh ra các thẻ HTML của riêng mình
Nhược điểm:
- Không tách biệt rõ ràng logic mẫu khỏi đánh dấu bằng chữ (điều này có thể được giảm thiểu bằng các tiền tố không gian tên)
Thí dụ:
<viewdata products="IEnumerable[[Product]]"/>
<ul if="products.Any()">
<li each="var p in products">${p.Name}</li>
</ul>
<else>
<p>No products available</p>
</else>
<Form style="background-color:olive;">
<Label For="username" />
<TextBox For="username" />
<ValidationMessage For="username" Message="Please type a valid username." />
</Form>
StringTemplate Xem Engine MVC
Mục tiêu thiết kế:
- Nhẹ. Không có lớp trang nào được tạo.
- Nhanh. Mẫu được ghi vào luồng đầu ra phản hồi.
- Lưu trữ. Các mẫu được lưu trữ, nhưng sử dụng FileSystemWatcher để phát hiện các thay đổi tệp.
- Năng động. Mẫu có thể được tạo ra khi đang bay trong mã.
- Linh hoạt. Mẫu có thể được lồng vào bất kỳ cấp độ.
- Phù hợp với các nguyên tắc MVC. Thúc đẩy phân tách UI và Business Logic. Tất cả dữ liệu được tạo trước thời hạn và được truyền xuống mẫu.
Ưu điểm:
- quen thuộc với các nhà phát triển Java StringTemplate
Nhược điểm:
- Cú pháp khuôn mẫu đơn giản có thể can thiệp vào đầu ra dự định (ví dụ: xung đột jQuery )
Cánh đập
Wing Beats là một DSL nội bộ để tạo XHTML. Nó dựa trên F # và bao gồm một công cụ xem ASP.NET MVC, nhưng cũng chỉ có thể được sử dụng cho khả năng tạo XHTML của nó.
Ưu điểm:
- Kiểm tra thời gian biên dịch XML hợp lệ
- Tô màu cú pháp
- Toàn bộ nội dung
- Tổng hợp quan điểm
- Khả năng mở rộng bằng cách sử dụng các lớp CLR thông thường, các hàm, v.v.
- Khả năng kết hợp và thao tác liền mạch vì đó là mã F # thông thường
- Đơn vị kiểm tra
Nhược điểm:
- Bạn không thực sự viết HTML nhưng mã đại diện cho HTML trong DSL.
XsltViewEngine (MvcContrib)
Mục tiêu thiết kế:
Xây dựng các khung nhìn từ XSLT quen thuộc
Ưu điểm:
- có mặt khắp nơi
- ngôn ngữ mẫu quen thuộc cho các nhà phát triển XML
- Dựa trên XML
- thời gian thử nghiệm
- Lỗi cú pháp và phần tử lồng có thể được phát hiện tĩnh.
Nhược điểm:
- phong cách ngôn ngữ chức năng làm cho việc kiểm soát dòng chảy khó khăn
- XSLT 2.0 không (có lẽ?) Không được hỗ trợ. (XSLT 1.0 ít thực tế hơn nhiều).