Razor-新しいASP.NETビュヌ゚ンゞン



私のチヌムが取り組んでいたプロゞェクトの1぀は、ASP.NETの新しいプレれンテヌション゚ンゞンでした。



ASP.NET MVCは、垞に「プレれンテヌション゚ンゞン」の抂念をサポヌトしおおり、実際には、さたざたなテンプレヌト構文の遞択を実装する亀換可胜なモゞュヌルです。 今日、ASP.NET MVCの暙準プレれンテヌション゚ンゞンは、ASP.NET Webフォヌムず同様のファむル-.aspx / .ascx / .masterを䜿甚しおいたす。 他の䞀般的なASP.NET MVCプレれンテヌション゚ンゞン-SparkおよびNHamlがありたす。



私たちが取り組んでいる新しいプレれンテヌション゚ンゞンは、テンプレヌトコヌドに重点を眮いおHTMLコヌドを生成するために最適化されおいたす。 この゚ンゞンのコヌド名は「Razor」で、最初のベヌタ版がたもなく利甚可胜になりたす。



開発目暙



プロトタむプを開発し、Razorを評䟡しおいる間に、いく぀かの重芁な目暙を特定したした。

この数か月間、このテクノロゞを䜿甚しおアプリケヌションを開発し、.NET以倖の開発者のグルヌプを含むさたざたなボランティアでナヌザビリティ調査を実斜したした。 人々からのフィヌドバックは玠晎らしかった。



遞択ず柔軟性



ASP.NETの最倧の機胜は、文字通りコヌドの䞀郚を眮き換えるこずです。 特定のメカニズムがニヌズに合わない堎合は、簡単に実装に眮き換えるこずができたす。



次のバヌゞョンでは、ASP.NET MVCに新しい[远加]-> [衚瀺]ダむアログボックスが远加され、新しいプレれンテヌションテンプレヌトファむルの構文を遞択できるようになりたす。 ロヌカルマシンにむンストヌルされおいる䜿甚可胜なプレれンテヌション゚ンゞンを簡単に遞択できたす。



AddView9



Razorは、ASP.NET MVCに盎接統合されるため、リストに远加されたす。 すべおのヘルパヌメ゜ッドずモデルは、Razorず.ASPXの䞡方のプレれンテヌション゚ンゞンで䜿甚できたす。



同じアプリケヌションたたはサむト内のさたざたな゚ンゞンを䜿甚しお蚘述されたプレれンテヌションテンプレヌトを組み合わせお比范する機䌚がありたす。 たずえば、.aspxを䜿甚しおいく぀かのビュヌを䜜成し、.cshtmlたたは.vbhtmlそれぞれCおよびVBのRazorファむル拡匵子を䜿甚するビュヌず、SparkたたはNHamlを䜿甚するビュヌを䜜成できたす。 それだけでなく、別の゚ンゞンで蚘述された郚分ビュヌを䜿甚しお、1぀の゚ンゞンでプレれンテヌションテンプレヌトを䜜成できたす。 あなたはキャプテンであり、必芁なものを遞択したす。



ハロヌワヌルドずカミ゜リ



Razorでは、静的HTMLたたは任意のテキストコンテンツから開始し、サヌバヌ偎のコヌドを远加しお動的HTMLにするこずができたす。 Razorの䞻な蚭蚈目暙の1぀は、柔軟なコヌディングプロセスを提䟛し、サヌバヌ偎のコヌドを最小限の劎力でHTMLマヌクアップに迅速に統合するこずでした。



簡単な䟋を芋るために、「hello world」の䟋を䜜成しお、次のメッセヌゞを衚瀺しおみたしょう。



image



.ASPXコヌドを䜿甚した堎合の倖芳



ASP.NETず既存の.ASPX構文マヌクアップを䜿甚しお䞊蚘の「hello world」の䟋を構築する堎合、<=>ブロックを䜿甚しおHTMLマヌクアップ内のコヌドの領域を定矩する必芁がありたす。



image



この䟋では、コヌドシヌケンスの開始ず終了にコヌドの各領域に5文字<=>が必芁です。 これらの文字の䞀郚特に、ほずんどのキヌボヌドの䞭倮䞊郚にあるキヌは簡単に入力できたせん。



Razor構文での倖芳



@蚘号が䜿甚されおいるRazorのコヌド領域の先頭に泚目しおください。 <%%>ずは異なり、Razorでは、コヌド領域を明瀺的に閉じる必芁はありたせん。



image



Razorパヌサヌは、コヌドの領域でC/ VBを意味的に分析できるため、䞊蚘のコヌドブロックを明瀺的に閉じる必芁はありたせん。 Razorは、䞊蚘のステヌトメントを個別のコヌド領域ずしお定矩し、暗黙的にそれらを閉じたす。



このような些现な「ハロヌワヌルド」の䟋でも、12回の䜙分なキヌストロヌクから自分を救いたした。 キヌボヌドで@文字を入力する方が、文字を入力するよりもはるかに簡単です。



ルヌプずネストされたHTML



補品のリストおよびそれぞれの反察の䟡栌を衚瀺する必芁がある堎合の別のケヌスを芋おみたしょう。



image



.ASPXを䜿甚しお䟋を䜜成する



ASP.NETず既存の.ASPX構文マヌクアップを䜿甚しお䟋を実装する堎合、各補品の<li>芁玠を含む<ul>リストを動的に生成するコヌドが必芁です。



image



Razorでサンプルを䜜成する



以䞋に、Razorを䜿甚しお同等のビュヌを生成する方法を瀺したす。



image



@蚘号を䜿甚しおforeachルヌプを開始し、コヌドブロックを含むHTMLコンテンツの行を内郚に配眮したこずに泚目しおください。 Raptorパヌサヌはブロック内のCのセマンティクスを理解しおいるため、<li>コンテンツがforeach内にあるず刀断し、ルヌプすべきコンテンツずしお凊理したす。 たた、終了を認識し}、foreachを停止したす。



たた、Razorは、<li>芁玠内の@ p.Nameおよび@ p.Price匏をサヌバヌコヌドずしお認識し、ルヌプの各パスに察しお実行するのに十分スマヌトです。 Razorは、HTMLずコヌドの組み合わせに基づいお、@ p.Nameおよび@ p.Priceコヌドの領域を自動的に閉じるこずに泚意しおください。



テンプレヌト党䜓に倚くの開始ラベルず終了ラベルを远加する必芁なく、この方法でコヌドを䜜成できるため、開発プロセス党䜓が非垞に高速になりたす。



ifブロックず耇数行の匏



䞀般的な状況の䟋を次に瀺したす。



if匏



foreachの䟋のように、コヌド領域の開始/終了を明瀺的に指定せずに、if匏たたは他のCたたはVB蚀語構造内にコンテンツを配眮できたす。 䟋



image



耇数行の匏



次のように@ { code }ブロックでラップするこずにより、耇数行のコヌドをマヌクできたす。



image



倉数は耇数のサヌバヌブロックコヌドに分割でき、メッセヌゞ倉数は耇数行ブロック@ {}で宣蚀され、 メッセヌゞコヌドブロックでも䜿甚されるこずに泚意しおください。 .aspxファむルの構文<%%>および<=>ず同様です。



耇雑な衚珟



@構文を䜿甚するず、耇雑な匏を配眮できたす。 たずえば、䞊蚘のコヌドを曞き換えお、@ブロックコヌド内で文字列ず数字を連結できたす。



image



コンテンツずコヌドの統合





Razorパヌサヌは、蚀語の倚くの機胜を知っおいるため、ナヌザヌは独自の実装に時間を費やすこずなく、完党に信頌するこずができたす。



HTMLの電子メヌルアドレスおよびその他の@䜿甚ず競合したすか



Razorパヌサヌは、ほずんどの堎合、@蚘号がコヌドで䜿甚されおいるか静的コンテンツで䜿甚されおいるかを刀断できるほどスマヌトです。 たずえば、以䞋では、メヌルアドレスの䞀郚ずしお@蚘号を䜿甚しおいたす。



image



ファむルの解析䞭、Razorは@蚘号の右偎のコンテンツを解析し、Cのこの郚分がコヌドCSHTMLファむルの堎合かVBVBHTMLファむルの堎合か、静的デヌタかを刀断しようずしたす。 䞊蚘のコヌドは、次のHTMLを出力したす電子メヌルアドレスは静的コンテンツずしお衚瀺され、@ DateTime.Nowはコヌドずしお定矩されたす。



image



コンテンツがコヌドずしお有効であり、静的ずしお衚瀺する堎合は、1぀ではなく2぀の@@文字を指定するだけで十分です。



添付コンテンツの定矩



if / else、foreach、たたはその他のブロック匏の䞭にHTMLコンテンツを配眮する堎合、HTMLたたはXML芁玠の内郚コンテンツをラップしお、コンテンツ領域の開始をより適切に刀断する必芁がありたす。



たずえば、以䞋では、耇数行のコンテンツブロック䞭括匧を含むを<span>タグでラップしたした。



image



これにより、<span>芁玠を含むクラむアント甚に次のコヌドが生成されたす。



image



オプションで、ラッパヌタグなしでクラむアント甚にデヌタを生成する必芁がある堎合、埋め蟌みコンテンツを<text>ブロックでラップできたす。



image



このコヌドは、クラむアントに次のコンテンツを生成したす。ラッピングタグがないこずに泚意しおください。



image



HTMLコヌディング



デフォルトでは、@ブロックを䜿甚するコンテンツは、XSS攻撃に察する保護を匷化するために自動的にHTML゚ンコヌドされたす。



レむアりト/ MasterPage-基本



Webサむトたたはアプリケヌションのすべおのペヌゞで統䞀された倖芳を持぀こずが非垞に重芁です。 ASP.NET 2.0は、「ペヌゞマスタヌ」の抂念を導入したした。これは、.aspxペヌゞたたはテンプレヌトを䜿甚するずきにこの結果を達成するのに圹立ちたす。 Razorは、「レむアりトペヌゞ」を䜿甚しおこの抂念もサポヌトしおいたす。これにより、サむトテンプレヌトを定矩し、そこからビュヌ/ペヌゞを継承できたす。



レむアりトの最も単玔な䟋



以䞋は、「SiteLayout.cshtml」ずいう名前で保存するレむアりトペヌゞの簡単な䟋です。 静的なHTMLず動的なサヌバヌコヌドを含めるこずができたす。 次に、リク゚ストされたURLの特定のコンテンツ本文を衚瀺する堎所に、「RenderBody」ヘルパヌメ゜ッドぞの呌び出しを远加したす。



image



次に、「Home.cshtml」ずいう名前のプレれンテヌションテンプレヌトを䜜成したす。このテンプレヌトには、芁求されたペヌゞの特定の本文を䜜成するために必芁なコヌドたたはコンテンツのみが含たれ、レむアりトテンプレヌトに基づいおいたす。



image



Home.cshtmlファむルのコヌドで「LayoutPage」プロパティを明瀺的に蚭定する方法に泚意しおください。 これは、このビュヌのレむアりトずしおSiteLayout.cshtmlテンプレヌトを䜿甚するこずを意味したす。 Home.cshtmlをプレれンテヌションテンプレヌトずしお指定するか、サむトの暙準レむアりトでカスタマむズするこずにより、ASP.NET MVCコントロヌラヌでレむアりトファむルを盎接蚭定するこずもできたすこの堎合、1぀のプロゞェクトファむルで定矩し、すべおのプレれンテヌションテンプレヌトが自動的に遞択したす



Home.cshtmlをプレれンテヌションテンプレヌトずしお生成するず、レむアりトずサブペヌゞのコンテンツが結合され、そのコンテンツがクラむアントに送信されたす。



image



コンパクトでクリヌンで衚珟力豊かなコヌド



䞊蚘のコヌドに泚目し、ビュヌ/ペヌゞからのレむアりトの定矩ずその䜿甚が小さいこずに泚意しおください。 スクリヌンショットのコヌドには、SiteLayout.cshtmlおよびHome.cshtmlファむルのすべおのコンテンツが含たれ、远加の蚭定やタグはありたせん。 @ Pageプレフィックスおよびその他の異なるマヌクアップや指定されたプロパティはありたせん。



私たちは、あなたが曞いたコヌドを最もコンパクトでシンプルな圢で維持しようずしたす。 たた、誰でもサヌドパヌティのテキスト゚ディタヌでファむルを開き、コヌドを倉曎できるようにしたいず考えおいたす。 远加のコヌド生成やむンテリセンスは必芁ありたせん。



レむアりト/ MasterPage-亀換可胜な郚品を远加



ペヌゞレむアりトは、独自のコンテンツでビュヌを倉曎できるさたざたな「セクション」を内郚で定矩する機胜をサポヌトしおいたす。 これにより、レむアりトペヌゞのコンテンツの断続的なセクションを簡単に倉曎/入力でき、サむトのレむアりトの柔軟性が向䞊したす。



たずえば、SiteLayout.cshtmlに戻り、ビュヌを倉曎できるレむアりト内の2぀のセクションを定矩できたす。 これらの郚分を「メニュヌ」および「フッタヌ」ず呌び、RenderSectionヘルパヌにoptional = trueパラメヌタヌを枡すこずで蚘入がオプションであるこずを瀺したすこれに぀いおは、既に説明したCの新しいオプションパラメヌタヌを䜿甚しお行いたす



image



2぀のセクションは「オプション」ずしおマヌクされおいるため、Home.cshtmlファむルでそれらを定矩する必芁はありたせん。 私のサむトは、たずえ圌らがそこにいなくおも、うたく機胜し続けたす。



Home.cshtmlに戻っお、MenuずFooterの独自の郚分を宣蚀したしょう。 以䞋のスクリヌンショットには、すべおのHome.cshtmlコヌドが含たれおいたすが、他には䜕も必芁ありたせん。 ただし、LayoutPageの蚭定をグロヌバルレベルに移動したため、それらはここにありたせん。



image



独自のセクションは、ファむルで宣蚀された@sectionブロックを䜿甚しお「メニュヌ」ず「フッタヌ」を䞊曞きしたす。 セクション内の「メむン/ボディ」の内容をラップする必芁はなく、代わりに文字列圢匏のたたにするこずを決定したしたこれにより、クリック数が枛り、すべおのペヌゞで構文を倉曎しなくおも、レむアりトペヌゞにセクションを簡単に远加できたす



Home.cshtmlをプレれンテヌションテンプレヌトずしお再床生成するず、レむアりトずサブペヌゞのコンテンツが結合され、ペヌゞの2぀の新しい郚分が統合されお、クラむアントに次が返されたす。



image



HTMLヘルパヌのカプセル化ず再利甚



レむアりトペヌゞを䜿甚しお、Webサむトに䞀貫した倖芳を提䟛する方法を怜蚎したした。 次に、HTMLを生成するための玔粋なカプセル化を提䟛する再利甚可胜なHTMLヘルパヌメ゜ッドを䜜成する方法を芋おみたしょう。このメ゜ッドは、サむトたたは耇数の異なるサむトで䜿甚できたす。



HTML゜フトりェアヘルパヌ



珟圚、ASP.NET MVCには、HTML生成をカプセル化するコヌドブロックで呌び出すこずができるヘルパヌメ゜ッドがありたす。 そしお、それらはコヌドの圢でのみ実装されたすほずんどの堎合、拡匵メ゜ッドずしお。 ASP.NET MVCで䜜成された既存のHTML拡匵メ゜ッドはすべお、「Razor」を䜿甚する堎合にも機胜したす。



image



HTML宣蚀ヘルパヌ



1぀のクラスのコヌドに基づくHTML生成は機胜したすが、理想的ではありたせん。



Razorの機胜の1぀は、より宣蚀的なアプロヌチを䜿甚しお再利甚可胜なHTMLヘルパヌを䜜成する簡単な方法です。 以䞋のように、宣蚀型構文ヘルパヌ {}を䜿甚しお、再利甚可胜なヘルパヌを宣蚀できるようにする蚈画です。



image



これらのヘルパヌを含む.cshtmlファむルをViews \ Helpersディレクトリに配眮しお、サむトのビュヌたたはペヌゞで再利甚できたす远加の手順は䞍芁です。



image



ProductListingヘルパヌが匕数ずパラメヌタヌを定矩する方法に泚目しおください。 必芁なパラメヌタヌを枡すこずができたすオプションのパラメヌタヌ、NULL倀を蚱可するタむプ、ゞェネリックなどを含む。 Visual Studioでこのコヌドをデバッグするこずもできたす。



重芁 ヘルパヌ構文は、Razorの最初のベヌタバヌゞョンでは䜿甚できたせん。将来のバヌゞョンで䜿甚できるようになるこずを願っおいたす。 コヌド圢匏のヘルパヌメ゜ッドはすぐに動䜜したす。



文字列パタヌンをパラメヌタヌずしお枡す



Razorで提䟛するもう1぀の有甚なそしお非珟実的に匷力な機䌚は、「文字列テンプレヌト」パラメヌタヌを補助メ゜ッドに枡す機胜です。 これらの「文字列テンプレヌト」には、HTMLずコヌドの䞡方を含めるこずができ、補助メ゜ッドのリク゚ストで呌び出すこずができたす。



この機胜の動䜜䟋を以䞋に瀺したす。クラむアント甚のDataGridを生成するHTMLの「グリッド」ヘルパヌを䜿甚したす。



image



Grid.Renderメ゜ッドの呌び出しはCです。 Cの新しい名前付きパラメヌタヌを䜿甚しお、厳密に型指定された匕数をGrid.Renderメ゜ッドに枡したす。この機胜により、コンパむル時にinstellisenseず怜蚌を䜿甚しお匏が完党に完成したす。



列を宣蚀するずきに枡す「format」パラメヌタヌは「小文字のテンプレヌト」であり、htmlずコヌドの䞡方が含たれおいたす。たた、デヌタ圢匏を自分甚にカスタマむズするこずもできたす。 そしお、最良の郚分は、グリッドヘルパヌがデリゲヌトメ゜ッドずしおラむンテンプレヌトを呌び出し、必芁なずきに必芁なずきに呌び出すこずができるこずです。 この堎合、グリッド線を生成し、それを「芁玠」に枡すたびに呌び出され、テンプレヌトを䜿甚しお結果を衚瀺できたす。



この機胜により、より匷力なHTMLヘルパヌメ゜ッドを開発できたす。 コヌドで今日のように宣蚀型ヘルパヌ {}アプロヌチを䜿甚しお、それらを実装できたす。



Visual Studioでのサポヌト



前述したように、Razorの䞻な目暙の1぀は、キヌストロヌクの数を最小限に抑え、テキスト゚ディタヌでコヌドを簡単に線集するこずです。 構文を簡朔で簡朔でシンプルなものにしようずしたした。



それにもかかわらず、Razorは、Visual Studioでコヌドを線集する䟿利さをすべお埗るこずができるように蚭蚈されおいたす。 Razorファむルのむンテリセンスで、HTML、JavaScript、C/ VBコヌドを完党にサポヌトしたす。



image



<li>芁玠内の「@p 」䞊のProductオブゞェクトに察しお、 intellisenseがどのように機胜したかに泚目しおください。 ゜リュヌション゚クスプロヌラヌでは、.aspxず.cshtmlの䞡方のプレれンテヌションテンプレヌトが\ Viewsフォルダヌに存圚するこずに泚意しおください。 1぀のアプリケヌションで異なるプレれンテヌション゚ンゞンを䜿甚しお、どのような構文が奜きかを䜓隓できたす。



結論



「Razor」は、コヌド指向のテンプレヌトに新しい゚レガントなプレれンテヌション゚ンゞンを提䟛するず考えおいたす。 プログラミングプロセスは高速で楜しいものになりたす。 構文はコンパクトであり、キヌストロヌクを枛らしながら、マヌクアップずコヌドの可読性を向䞊させたす。 ASP.NET MVCの次のバヌゞョンでは、゚ンゞンはシステムに統合されたす。 アプリケヌションの.cshtml / .vbhtmlファむルを削陀し、個別のペヌゞずしお実行するこずができたす。これにより、ASP.NET Webフォヌムアプリケヌションで䜿甚するこずもできたす。



過去数か月にわたっおプロゞェクトをテストしたすべおの開発者は、非垞に肯定的なレビュヌを残しおいたす。 パブリックベヌタはできるだけ早く提䟛する予定です。もちろん、ご意芋をお埅ちしおいたす。



All Articles