Каковы преимущества использования альтернативного механизма просмотра ASP.NET MVC? - PullRequest
11 голосов
/ 25 июня 2009

Я посмотрел на обычных подозреваемых ... Spark, NHaml и т. Д. Все они кажутся синтаксическим сахаром для тех, кому не нравится синтаксис <%%>. Есть ли другие ощутимые преимущества? Мне кажется, что синтаксический сахар не является достаточной причиной для изменения всего движка представления.

Причины, опубликованные до сих пор:

  1. Проще переходить с другой платформы
  2. Более естественное переключение контекста
  3. Лучшее разделение интересов
  4. Меньше строк кода
  5. Лучшее сопротивление межсайтовому скриптингу
  6. Лучшее соответствие XHTML

Ответы [ 4 ]

8 голосов
/ 25 июня 2009

Причина, по которой людям не нравится синтаксис <% %>, заключается не в том, что он содержит много синтаксической соли, а в том, что он делает кодировку Views * , что может противоречить концепции 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 голосов
/ 25 июня 2009

С точки зрения Нхамла

  • сделать взгляд более лаконичным

вид Намла (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 и пользовательские теги кода могут использоваться для выполнения программных действий. Все это позволяет spark минимизировать переключение контекста, которое происходит как для 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]

0 голосов
/ 02 февраля 2011

Да, см. Генератор HTML для .NET?

Вам нужна такая же рефакторируемость, как и в обычном коде c #. Это код, поэтому вы хотите иметь возможность структурировать его таким же образом. Использовать наследование, состав, параметры, циклы, рекурсию и т. Д.

0 голосов
/ 25 июня 2009

Синтаксический сахар каким образом? Так что вы можете узнать еще один синтаксис? Нет. Эти движки очень полезны для разработчиков, переходящих с других платформ. Облегчает их жизнь.

...