Bietet die Razor-Syntax einen überzeugenden Vorteil beim UI-Markup?

88

Ich stelle fest, dass Scott Guthrie Razor in seinem Blog ein wenig erwähnt, aber ich bin mir einfach nicht sicher, ob es gut zu meinem Stil passt.

Zugegeben, es ist ein ziemlich ungewohnter Stil für jemanden, der an eine "Standard" -Sorte von ASP.Net-Markups (Platzhalter für Inhalte und Inline-Code) gewöhnt ist, aber es fühlt sich für mich einfach nach vielen zusätzlichen Seiten an, die verwaltet werden müssen, und nach weniger klaren Markups.

Was denken andere Leute darüber? Ist es etwas, von dem Sie glauben, dass es ernsthaft in Betracht gezogen werden sollte, wenn neue MVC-Seiten erstellt werden, oder versucht es nur, ein Problem zu lösen, das es nicht gibt?

Phil.Wheeler
quelle
3
Ich dachte eigentlich, dass die Syntax für jemanden einfach ist, der mit der regulären Ansichts-Engine vertraut ist. Sie verwenden einfach @ anstelle von <% und schließen Ihre Code-Nuggets nicht ...
Jaco Pretorius
Sie können diesen Konverter ausprobieren . Weitere Informationen finden Sie in diesem Blogbeitrag .
George K

Antworten:

153

[Haftungsausschluss: Ich bin einer der Microsoft-Entwickler für MVC und Razor, daher bin ich möglicherweise etwas voreingenommen :)]

Wir haben Razor als prägnante Vorlagensprache entwickelt, die nur die minimal erforderliche Anzahl von Steuerzeichen verwendet. Ich würde sagen, dass große Teile Ihrer Ansichten mit weniger Zeichen als der gleiche Code mit der "traditionellen" WebForms-Syntax ausgedrückt werden können.

Zum Beispiel das folgende Codefragment in der ASPX-Syntax:

<% if(someCondition) { %>
  <ol>
  <% foreach(var item in Model) { %>
     <li><%: item.ToString() %></li>
  <% } %>
  </ol>
<% } %>

Kann in Razor wie folgt ausgedrückt werden:

@if(someCondition) {
   <ol>
   @foreach(var item in Model) {
      <li>@item.ToString()</li>
   }
   </ol>
}

Während die ASPX-Version 21 Übergangszeichen (das <%und %>) hat, hat die Razor-Version nur drei ( @)

Ich würde sagen, dass die Vorteile von Razor wie folgt sind:

  1. Prägnante Syntax, die der Art und Weise, wie Sie normalen C # -Code schreiben, sehr ähnlich ist (lesen Sie den folgenden aktuellen Blog-Beitrag von Phil Haack, in dem Asxp mit der Razor-Syntax verglichen wird: http://haacked.com/archive/2011/01/06/razor- syntax-quick-reference.aspx )
  2. Automatische HTML-Codierung der Ausgabe (die Sie vor HTML-Injection-Angriffen schützt)
  3. Integrierte (wenn auch nicht 100%) Validierung Ihres Markups, mit der Sie unausgeglichene Tags vermeiden können

Die seitenbezogenen Konzepte lassen sich auch leicht von dem abbilden, was Sie in ASPX haben

  • Wie Sie sehen, ist Inline-Code weiterhin zulässig
  • Abschnitte (die optional sein können) entsprechen Inhaltsplatzhaltern
  • Layoutseiten anstelle von Masterseiten
  • Die Konzepte von Voll- und Teilansichten sind gleich
  • @functions { ... } Blöcke statt <script runat="server"> ... </script>

Darüber hinaus verfügt Razor über eine Reihe nützlicher Konzepte, die meiner Meinung nach besser sind als die in ASPX verfügbaren:

  • @helper Funktionen für die einfache Erstellung von Funktionen, die Markups ausgeben
  • @modelSchlüsselwort zum Angeben des Modelltyps Ihrer Ansicht, ohne dass eine <%@ Page ...Direktive mit dem vollständigen Klassennamen geschrieben werden muss

Ich würde gerne glauben, dass wir ein echtes Problem gelöst haben, das es Ihnen ermöglicht, einfacher prägnante und standardkonforme Ansichten zu schreiben und Ihnen gleichzeitig Möglichkeiten zur Umgestaltung des allgemeinen Codes zu bieten.

Natürlich wird nicht jeder die Syntax bevorzugen, weshalb wir auch die ASPX View Engine voll unterstützen. Darüber hinaus können Sie sich Spark und NHaml ansehen, zwei View-Engines von Drittanbietern, die eine große Community-Fangemeinde haben. Der folgende Blog-Beitrag bietet einen guten Vergleich der verschiedenen Angebote: http://blogs.msdn.com/b/coding4fun/archive/2010/10/04/10070953.aspx

Marcind
quelle
7
Vielen Dank für eine wirklich klare und gründliche Antwort. Dies ändert meine Meinung genug, um Razor einen anständigen Schuss zu geben.
Phil.Wheeler
2
Aaron, Sie können Razor und Aspx miteinander kombinieren, sodass Sie, wenn Sie möchten, Ihr Projekt Seite für Seite konvertieren können (der einzige Nachteil ist, dass Sie Ihre Masterseiten im Razor-Format duplizieren müssen, da in einer Razor-Ansicht eine verwendet wird Aspx Masterseite wird nicht unterstützt)
Marcind
1
Wie fügen Sie ein @ -Zeichen in Ihren HTML-Code ein? zB <a href="mailto:[email protected]">?
Chris S
9
@ Chris Escape it:@@
BrunoLM
6
Als Update für diesen Beitrag habe ich Razor in den letzten drei oder vier Monaten verwendet und da ich mich jetzt daran gewöhnt habe, glaube ich nicht, dass ich bequem zum traditionellen ASP.Net-Markup zurückkehren kann.
Phil.Wheeler
3

Persönlich schätze ich die Reduzierung der Anzahl der verwendeten Escape-Zeichen sehr. Die Verwendung <% %>wird im Vergleich zu @{}und ist bei weitem nicht so syntaktisch ansprechend.

Darüber hinaus wird das Schreiben einer vollständigen Definition für das Codebehind und die Seite zu einer einzigen vereinfacht @model model.

Wie auch von Marcind bemerkt, runat=serverist es auch sehr schön , nicht immer einschließen zu müssen .

Insgesamt schätze ich die Verwendung der Razor-Engine sehr und finde, dass sie mir nicht nur die Entwicklung erleichtert, sondern auch das Lesen von Code erleichtert.

Travis J.
quelle