MVC 3 On Razor使用


マイクロソフトは10日、ASP.を発表した.NET MVC 3のリリース候補版(RC:Release-candidate)は、Razorビューエンジンのインテリジェント感知などの機能を提供し、同様にOnlineライセンスを備えている.
わざわざダウンロードしてインストールして、住所をダウンロードします:http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a920ccee-1397-4feb-824a-2dfefee47d54&displaylang=en
伝説の強力なRazorエンジンを試してみましたが、本当に素晴らしいです.以下は私のいくつかの使用学習体験です.
 
一、Razor基礎紹介
Razorはcshtml接尾辞のファイル名を採用し、スクリーンショットは以下の通りである.
clip_image002
 
A、レイアウト
図から見ると、新しいビューエンジンはもうありません.MasterというMaster Pageの代わりにLayout.cshtmlと_ViewStart.cshtml.
_Layout.cshtmlはMasterPageに等しい.次の図に示します.
clip_image004
これはLayout.cshtmlファイルには、MasterPageののラベル文がなくなりました.代わりに
@RenderBody():サブページのマスターコンテンツを表示
@RenderSection():特別なセクションが表示されます.
HelperResult RenderSection(string name, bool required = true);
requiredのデフォルトはtrueで上書きする必要があり、falseに設定するとオプションで上書きします.
注意するのは:この関数はRC版の中でパラメータはある程度変えて、パラメータの中でoptionalはrequiredに変えて、VBのキーワードと衝突すると言います
 
次の図は、サブページのフッター部分を上書きし、サブページ実装時に@sectionカスタムセクション名{}フォーマットを使用します.
clip_image006
 
親ページにデフォルトのインプリメンテーション・セクションを書きたい場合は、サブページでオプションのインプリメンテーションとしてどうすればいいですか?
これはMasterPageで直接サポートされていますが、Razorでは少し複雑で、個人的にはこの書き方が改善できると思います.
下図に示すように、親ページにデフォルトのフッターインプリメンテーションを書き、サブページにインプリメンテーションがある場合はサブページインプリメンテーションを使用し、ない場合はデフォルトインプリメンテーションを使用します.
ここではまずbool IsSectionDefined(string name)関数でサブページインプリメンテーションがあるかどうかを判断し,ある場合はサブページインプリメンテーションを呼び出す.
clip_image008
 
_ViewStart.cshtml:このページは、他のViewのベースクラスとして理解できます.デフォルトのコードは3行で次のようになります.
clip_image010
このページで定義されている他のViewのデフォルトのMasterPageは「~/Views/Shared/_Layout.cshtml」です.
もちろん、他のページが直接呼び出すことができるように、共通の関数および変数を定義することもできます.
 
B、ASPX文法との違い
 
ASPX:<% %> 
Razor:@{ }
どちらもコードブロックの記述記号ですが、Razorを使うとコードがより簡潔で快適になります.下図は対比文法です.
clip_image002[4]
 
ASPX:<%= %> 
Razor:@Razorでは、"@"文字を1つ使うだけでコードブロックの開始を識別することができます.後の変数の終了位置を自動的に判断することができます.下図のように、Razor構文を使って、多くのコードを書くことが少なくなっています.
clip_image004[5]
clip_image006[4]
また、Razor解析器には多くの言語の知能が内蔵されている.ほとんどの場合、Razor解析器は、テンプレートの「@」文字がコードで使われているのか、静的コンテンツで使われているのかを導出するのに十分な能力を持っています.
例えば、次の例のメールアドレスに「@」の文字を使用すると、[email protected]静的コンテンツとして解析され、@DateTime.Nowは解析コードによって実行されているので、強いでしょう.コードと同じフォーマットのコンテンツ(またはコードをコンテンツとして見たい)に遭遇した場合は、@を明示的に打って別の"@"文字で変換することができます.
image
 
ASPX:<%: %> 
Razor:@()
この2つの文法はいずれもコンテンツの符号化を実現することができるが、Razorのほうが便利で、下図に示すように:
clip_image008[4]
clip_image010[4]
結果出力:テキスト符号化
 
C、その他のRazor文法
image

@using :      

@model:       Model

@section:           

              ,          API  。

 
二、MVC 3 RC特性展示
MVC 2と比較すると、バージョン3は大幅に改善されています(Razorエンジンを除く).
 
A、Partial Page Output Caching(一部ページ出力キャッシュ)
ASP.NET MVCは、第1版の時点でページ全体のキャッシュをサポートし始めた.ASPからNET MVC V 3から、一部のページキャッシュもサポートできます.
これにより、キャッシュまたはresponseのセグメントの一部を簡単にキャッシュできます.
 
たとえば、1つのカテゴリに基づいてプロダクトリストを取得し、リクエストカテゴリが同時にキャッシュされたプロダクトリストを出力します.
次の図に示すように、Actionでは出力キャッシュの有効期限が1時間定義されており、キャッシュパラメータはcategoryです.
したがって、重複要求が発生した場合、キャッシュ情報を自動的に出力して、頻繁にデータベースを検索しないようにし、サーバの負担を軽減し、応答速度を向上させることができます.
image
image
 
B、暗黙javascriptと検証
どちらかの優れたASP.NET MVC 3の改良は、AJAXとValidation helpersがunobtrusive JavaScriptをデフォルトで使用し、ajaxはjqueryを採用して作成することです.
image
image
デフォルトのコンフィギュレーション・セクションではunobtrusive JavaScriptが有効になっているため、上記のjsをオンにすると、検証はクライアント検証になります.
MVC 2のajax検証に比べる、Viewページに<%Htmlを追加する必要はない.EnableClientValidation(); %>この行のコードです.
 
C、グローバルフィルタ
ASP.NET MVCは、フィルタリング機構によって「横断」論理を記述的に適用することをサポートする.プロパティ構文を使用して、次のようにコントローラと実行関数のフィルタを指定できます.
image
しかし、使用では、Authorizeフィルタなどのプログラム内のすべてのコントローラにフィルタロジックを適用することがしばしば望ましい.
現在ASP.NET MVC 3では、プログラム内のすべてのコントローラに適用できるグローバルなフィルタを指定できます.
次の図に示すように、GlobalファイルにカスタムフィルタをGlobalFliterCollectionに追加すればよい
image
 
MVC 3では、このフィルタの判定ロジックが非常に柔軟で、いくつかの条件が一致したときにのみ有効になるようにグローバルフィルタを構成することができます.
下図に示すように、グローバル権限フィルタを実装し、どのページにもログインしていない場合はLogOnページにジャンプします.グローバルなので、LogOnページにジャンプすると、
権限があるかどうかも判断するので、最終ページには何も表示されません.
では、どのようにしてこの問題を解決し、LogOnページにグローバル権限を適用しないようにしますか?
次の図に示すように、LogOnページをフィルタリングして他のページに適用するIFIlterProviderを実現します.コードは次のとおりです.
image
Authorizeフィルタを使用すると、Webconfigで設定したページにジャンプするのではなく、権限がない場合に自動的に「Account/LOgIn」ページにジャンプするバグが見つかりました.
     
この設定は機能しないようで、ScottGu’s Blogを見て、これがバグであることを知って、解決策はコンフィギュレーション構成セクションの下で参加することです
   
正式版ではもうこの問題はないと思います.
 
他にもいくつかの新しい特性がありますので、参考にしてください.http://tech.it168.com/a2010/1111/1124/000001124749_1.shtml