В чем преимущества использования альтернативного механизма просмотра ASP.NET MVC?
Я посмотрел на обычных подозреваемых... Spark, NHaml и т.д. Все они кажутся синтаксическим сахаром для тех, кому неудобно синтаксис <%% > . Есть ли другие материальные выгоды? Синтаксический сахар, по-видимому, не является достаточной причиной для изменения всего механизма просмотра.
Причины, опубликованные до сих пор:
- Легче переходить с другой платформы
- Более естественное переключение контекста.
- Лучшее разделение проблем
- Меньше строк кода
- Лучшая устойчивость к межсайтовому скриптингу
- Улучшение соответствия XHTML
Ответы
Ответ 1
Причина, по которой люди неудобны в синтаксисе <% %>
, заключается не в том, что она содержит много синтаксической соли, но что она делает представление ориентированным на код, что может противоречить концепции MVC создания представлений как можно глубже. Например, цель Spark - " разрешить html доминировать над потоком, а код - без проблем". Таким образом, ощутимое преимущество облегчает следование духу MVC.
<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>
Если выше это просто синтаксический сахар, то сам ASP.NET MVC является просто синтаксическим сахаром поверх веб-форм ASP.NET.
Ответ 2
С точки зрения nhaml
- сделать просмотр более кратким.
Nhaml view (274 символа)
%h2= ViewData.CategoryName
%ul
- foreach (var product in ViewData.Products)
%li
= product.ProductName
.editlink
= Html.ActionLink("Edit", new { Action="Edit" ID=product.ProductID })
= Html.ActionLink("Add New Product", new { Action="New" })
вид aspx (665 символов)
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="List.aspx" Inherits="MvcApplication5.Views.Products.List" Title="Products" %>
<asp:Content ContentPlaceHolderID="MainContentPlaceHolder" runat="server">
<h2><%= ViewData.CategoryName %></h2>
<ul>
<% foreach (var product in ViewData.Products) { %>
<li>
<%= product.ProductName %>
<div class="editlink">
(<%= Html.ActionLink("Edit", new { Action="Edit", ID=product.ProductID })%>)
</div>
</li>
<% } %>
</ul>
<%= Html.ActionLink("Add New Product", new { Action="New" }) %>
</asp:Content>
Он делает это через ряд сокращенных символов. См. Здесь полный список [http://code.google.com/p/nhaml/wiki/NHamlLanguageReference]
лучше посмотреть здесь [http://code.google.com/p/nhaml/wiki/PartialsAndLayouts]
-
htmlencoding по умолчанию (через config) для всего содержимого, чтобы избежать XSS
-
Выход, совместимый с XHTML
с точки зрения искры
- встроенный код в теги xml и пользовательские теги кода могут использоваться для выполнения прогромных действий. Все это позволяет искры минимизировать переключение контекста, которое происходит как для nhaml, так и для aspx.
например, эта искра
<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>
aspx и nhaml потребовали бы, чтобы вы выполнили контекст для кода, чтобы выполнить оператор if..else.
Ссылки
[http://code.google.com/p/nhaml/wiki/NHamlLanguageReference]
[http://sparkviewengine.com/documentation/syntax]
Ответ 3
Синтаксический сахар каким образом? Чтобы вы могли узнать еще один синтаксис? Нет. Эти двигатели очень полезны для разработчиков, переходящих с других платформ. Делает их жизнь намного легче.
Ответ 4
Да, см. HTML-генератор для .NET?
Вы хотите иметь ту же самую рефакторуемость, что и в вашем обычном коде С#. Это код, поэтому вы хотите иметь возможность структурировать его таким же образом. Используйте наследование, состав, параметры, циклы, рекурсию и т.д.