asp.net-mvc - 開発 - asp.net mvc コントローラ




Razorの構文は、UIマークアップで魅力的な利点を提供しますか? (2)

私はScott GuthrieがRazorに彼のブログで公正な 言葉言及し始めていることに気がついたが、私はそれが自分のスタイルに適しているとは確信していない。

"標準"のASP.Netマークアップ(コンテンツプレースホルダとインラインコード)にかなり慣れている人にとっては、それほどよく知られていないスタイルだとは思うが、管理するページが増えていると感じる。

それに対する他の人の気持ちは何ですか? 新しいMVCページを足場にしているとき、あるいは存在しない問題を解決しようとしているときに真剣に考えなければならないと思うものですか?


[免責事項:私はMVCとRazorのマイクロソフトの開発者の一人です。だから私は少し偏っているかもしれません:)]

Razorは、必要最小限の制御文字しか使用しない簡潔なテンプレート言語として設計されています。 私はあなたの意見の大部分は、 "従来の" WebForms構文を使用して同じコードよりも少ない文字で表現できると言います。

たとえば、ASPX構文の次のコードスニペット。

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

Razorで次のように表現できます。

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

ASPXバージョンには21の切り替え文字( <%%> )がありますが、Razorバージョンには3つしかありません( @

私はRazorの利点は次の通りだと言います:

  1. 簡潔な構文です。通常のC#コードの記述方法とよく似ています(Phil Haackの最近のAsxpとRazorの構文を比較してhttp://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspxhttp://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx ://haacked.com/archive/2011/01/06/razor- http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx
  2. 出力の自動HTMLエンコード(htmlインジェクション攻撃からあなたを守る)
  3. 不均衡なタグを避けるためにマークアップの検証が組み込まれています(100%ではありません)。

ページ関連の概念は、ASPXの内容と簡単に対応します

  • インラインコードは引き続き許可されています
  • セクション(オプション)は、コンテンツプレースホルダと同等です
  • マスターページではなくレイアウトページ
  • フルビューとパーシャルビューのコンセプトは同じです
  • <script runat="server"> ... </script>代わりに@functions { ... }ブロック

さらに、Razorには、ASPXで提供されているものよりも優れたいくつかの便利な概念があります。

  • マークアップを生成する関数を本当に簡単に作成するための@helper関数
  • フル・クラス名で<%@ Page ...ディレクティブを書く必要なしに、ビューのモデル・タイプを指定するための@modelキーワード

実際の問題に取り組んできたと思います。これは、簡潔で標準に準拠したビューをより簡単に作成すると同時に、共通のコードをリファクタリングする方法を提供することです。

もちろん、誰もがASPXビューエンジンを完全にサポートしている構文を好むわけではありません。 さらに、重要なコミュニティを楽しむ2つのサードパーティのビューエンジンであるSparkとNHamlをチェックすることができます。 次のブログ記事では、さまざまな製品の比較を行っていますhttp://blogs.msdn.com/b/coding4fun/archive/2010/10/04/10070953.aspx : http://blogs.msdn.com/b/coding4fun/archive/2010/10/04/10070953.aspx






asp.net-mvc-3