Apakah sintaks Razor memberikan keuntungan yang menarik dalam markup UI?

88

Aku melihat Scott Guthrie mulai menyebutkan Razor sebuah sedikit yang adil di blog-nya tapi aku hanya tidak yakin bahwa itu cocok untuk gaya saya.

Memang ini adalah gaya yang cukup asing bagi seseorang yang cukup terbiasa dengan jenis markup ASP.Net "standar" (pemegang tempat konten dan kode sebaris), tetapi itu hanya terasa seperti banyak halaman tambahan untuk dikelola dan markup yang kurang jelas bagi saya.

Apa perasaan orang lain tentang itu? Apakah itu sesuatu yang Anda yakini harus dipertimbangkan dengan serius saat menyusun halaman MVC baru atau hanya mencoba memecahkan masalah yang tidak ada?

Phil.Wheeler
sumber
3
Saya sebenarnya mengira sintaksnya mudah bagi seseorang yang terbiasa dengan mesin tampilan biasa. Anda cukup menggunakan @ alih-alih <% dan jangan menutup nugget kode Anda ...
Jaco Pretorius
Anda dapat mencoba konverter ini . Untuk informasi lebih lanjut periksa posting blog ini .
George K

Jawaban:

153

[Penafian: Saya salah satu pengembang Microsoft di MVC dan Razor, jadi saya mungkin agak bias :)]

Kami merancang Razor menjadi bahasa templat yang ringkas yang hanya menggunakan sedikit karakter kontrol yang diperlukan. Saya akan mengatakan bahwa sebagian besar pandangan Anda dapat diekspresikan dengan karakter yang lebih sedikit daripada kode yang sama menggunakan sintaks WebForms "tradisional".

Misalnya cuplikan kode berikut dalam sintaks ASPX:

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

Dapat diungkapkan sebagai berikut di Razor:

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

Sementara versi ASPX memiliki 21 karakter transisi ( <%dan %>), versi Razor hanya memiliki tiga ( @)

Saya akan mengatakan bahwa keuntungan dari Razor adalah sebagai berikut:

  1. Sintaks singkat, yang sangat mirip dengan cara Anda menulis kode C # biasa (lihat posting blog terbaru berikut ini oleh Phil Haack membandingkan Asxp dengan sintaks Razor: http://haacked.com/archive/2011/01/06/razor- sintaks-cepat-referensi.aspx )
  2. Pengodean output HTML otomatis (yang membantu melindungi Anda dari serangan injeksi html)
  3. Validasi markup bawaan (meskipun tidak 100%) yang membantu Anda menghindari tag yang tidak seimbang

Konsep terkait halaman juga memetakan dengan mudah dari apa yang Anda miliki di ASPX

  • Seperti yang Anda lihat, kode inline masih diperbolehkan
  • Bagian (yang bisa opsional) setara dengan tempat penampung konten
  • Halaman tata letak, bukan halaman Master
  • Konsep tampilan penuh dan parsial adalah sama
  • @functions { ... } blok, bukan <script runat="server"> ... </script>

Selain itu Razor memiliki sejumlah konsep berguna yang menurut saya lebih baik daripada yang tersedia di ASPX:

  • @helper fungsi untuk pembuatan fungsi yang memancarkan markup dengan sangat mudah
  • @modelkata kunci untuk menentukan jenis model tampilan Anda tanpa harus menulis <%@ Page ...direktif dengan nama kelas lengkap

Saya ingin berpikir bahwa kami telah mengatasi masalah nyata, yang memungkinkan Anda untuk lebih mudah menulis tampilan yang ringkas dan sesuai standar sementara pada saat yang sama memberi Anda cara untuk mengubah kode umum.

Tentu saja, tidak semua orang akan menyukai sintaks, itulah sebabnya kami juga mendukung penuh mesin tampilan ASPX. Selain itu, Anda dapat melihat Spark dan NHaml, yang merupakan dua mesin tampilan pihak ketiga yang menikmati banyak pengikut dari komunitas. Entri blog berikut memiliki perbandingan yang baik dari berbagai penawaran: http://blogs.msdn.com/b/coding4fun/archive/2010/10/04/10070953.aspx

marcind
sumber
7
Terima kasih atas jawaban yang sangat jelas dan menyeluruh. Ini mengubah pendapat saya cukup untuk memberi Razor kesempatan yang layak.
Phil.Wheeler
2
Aaron, Anda dapat mencampur dan mencocokkan Razor dan Aspx bersama-sama jadi jika Anda ingin, Anda dapat mengonversi proyek Anda satu halaman pada satu waktu (satu-satunya downside adalah bahwa Anda harus menduplikasi halaman master Anda dalam format Razor karena memiliki tampilan Razor menggunakan halaman master aspx tidak didukung)
marcind
1
Bagaimana Anda memberi tanda @ di HTML Anda? mis <a href="mailto:[email protected]">.
Chris S
9
@ Chris Escape itu:@@
BrunoL
6
Sebagai pembaruan untuk posting ini, saya telah menggunakan Razor selama tiga atau empat bulan terakhir dan, setelah menjadi terbiasa, jangan berpikir saya dapat dengan nyaman kembali ke markup ASP.Net tradisional.
Phil.Wheeler
3

Secara pribadi saya sangat menghargai pengurangan berapa banyak karakter pelarian yang digunakan. Menggunakan <% %>menjadi sangat membosankan jika dibandingkan dengan @{}dan tidak terlalu menarik secara sintaksis.

Selain itu, menulis definisi lengkap untuk codebehind dan halaman disederhanakan menjadi satu @model model.

Seperti juga dicatat oleh marcind, tidak harus selalu memasukkan runat=serverjuga sangat menyenangkan.

Secara keseluruhan, saya sangat menghargai penggunaan mesin Razor dan merasa itu tidak hanya membuat segalanya lebih mudah bagi saya untuk mengembangkan tetapi juga membuat kode lebih mudah dibaca.

Travis J
sumber