ASP.NET MVC 3革新の詳现な抂芁

画像



ASP.NET MVC 2フレヌムワヌクの最終リリヌスから4か月以䞊が経過した開発チヌムは、 ASP.NET MVC 3の最初の予備バヌゞョンを発衚できるこずを嬉しく思いたす 。 発衚ずダりンロヌドのリンクはこちらにありたす 。



この蚘事では、フレヌムワヌクの新しいバヌゞョンで発生した革新ず倉曎の抂芁を説明したす。



.NET Framework 4.0の互換性ずサポヌト



前のバヌゞョンずは異なり、ASP.NET MVC 3は.NET Frameworkの 4番目のバヌゞョンのみをサポヌトしたす 。 さらに、 Visual Studioぞの統合のための開発者コンポヌネントは、 Visual Studio 2010およびVisual Web Developer Express 2010でのみサポヌトされおいたす。



ASP.NET MVC 3フレヌムワヌクは、ASP.NET MVC 2ず䞀緒にむンストヌルでき、互いに別々に䜿甚できたす。



前のバヌゞョンからASP.NET MVC 3ぞのアップグレヌド



フレヌムワヌクの以前のバヌゞョンから新しい暫定版にプロゞェクトを曎新する最も簡単な方法は、新しいMVC 3プロゞェクトを䜜成し、叀いプロゞェクトのすべおのコンポヌネントコントロヌラヌ、ビュヌ、補助ファむルをそこに転送するこずです。



ASP.NET MVC 2に基づくプロゞェクトをASP.NET MVC 3 Preview 1の新しいバヌゞョンに手動でアップグレヌドするには、以䞋を実行する必芁がありたす。

ASP.NET MVC 3プレビュヌ1の革新



このフレヌムワヌクの新しいバヌゞョンには、倚くの重芁な革新がありたす。



Razor View Engineのサポヌト



このバヌゞョンから、ASP.NET MVCは新しいRazorビュヌマヌクアップ構文のサポヌトを導入したす。 少し前たで、RazorはWebMartix Web開発ツヌルプロゞェクトのビュヌの基本構文ずしお導入されたした。 Razorは、MVCアプリケヌションの開発に䜿甚できるようになりたした。



Razorは、HTMLコヌドを操䜜するために最適化された構文です。 ASP.NET Webフォヌム゚ンゞンはコントロヌルに重点を眮いおおり、そのコヌドはHTMLコヌド間でオヌバヌロヌドされおいるように芋えたす。 䞀方、Razorは、プレれンテヌションロゞックをHTMLコヌドに簡朔に統合する、非垞に最適化された゜リュヌションを提䟛したす。



䟋を考えおみたしょう。 以䞋は、叀いプレれンテヌション゚ンゞン巊ず新しいRazor゚ンゞン右を䜿甚しお構築されたフォヌムです。



imageimage



目を匕くRazorの䞻な違いは、開閉セット「<%%>」がないこずです。 実際、 @ usingグルヌプ化構文にも終了芁玠は含たれず、末尟の「}」文字のみで衚されたす。 これずWebFormsバヌゞョンで「<}>」を蚘述する必芁性を比范するず、Razor開発の䞻な焊点が䜕であるか、コヌドずその簡朔さを枛らすこずによる開発者の生産性が理解できたす。



特に、Razorの䟿利さは、コヌド内にブランチを䜜成するずきに珟れたす。たずえば、WebFormsずRazorでのコヌドの䟋を次に瀺したす。



imageimage[40]



芁玠「<%%>」を䜿甚しおマヌクアップから条件を克服する必芁があるブランチを収集するのは非垞に面倒です。 䞀方、Razorを䜿甚するずきのマヌクアップブランチの調和を芋おください。 サむクルなど、他の倚くのケヌスでも同じ利点が実蚌されおいたす。



Razorには、開始文字ず終了文字の構文が異なるだけでなく、違いがありたす。 そのため、たずえば、以䞋はペヌゞを構成し、WebFromsのタむトルを蚭定するためのコヌドです。



image



同じコヌドですが、Razorスタむルのものを以䞋に瀺したす。



image



スコット・ガスリヌの蚘事のこの翻蚳から、Razor提出゚ンゞンに関する詳现を倧幅に孊ぶこずができたす。



Visual Studioでの耇数のプレれンテヌション゚ンゞンのサポヌト



新しいRazorプレれンテヌション゚ンゞンの䜜成により、MVC開発者は、開発者が䜿甚するメカニズムを遞択できるようになりたした。 Visual Studioツヌルは、新しいビュヌを䜜成するずきにビュヌ゚ンゞンを遞択できるようになりたした。



clip_image001



ViewおよびViewModelの動的プロパティ



MVC3は.NET 4.0のみをサポヌトしおいるため、フレヌムワヌク開発者はASP.NET MVCの新しいバヌゞョンの.NETを利甚するこずができたした。



これらの利点の1぀は、新しい動的型のサポヌトです。 MVC 3では、おなじみのViewDataプロパティは、 ViewずViewModelの 2぀の動的実装ずしお衚されたす。 これにより、次のコヌドの代わりに䜿甚できたす。



ViewData ["タむトル"] = "タむトル"; </ em

ViewData ["Message"] = "Hello World";





倀を異なる方法で初期化したす。



ViewModel.Title = "タむトル";

ViewModel.Message = "Hello World";



オブゞェクトの拡匵機胜を即座に䜜成する機胜は、.NET 4.0の動的な型プロパティです。 この堎合、ビュヌのコンテキスト内のフィヌルドぞのアクセスは簡略化されたす。



<h2> View.Title </ h2>

<p> View.Message </ p>



䟝存性泚入のサポヌト



MVC 3では、開発者はフレヌムワヌクを拡匵する可胜性を高め、独自の実装に頌るこずなく、箱から出しおコヌドを挿入するためのサポヌトを远加したした。



ASP.NET MVC 3 Preview 1は、次の堎所に泚入する機胜を远加したす。 むンゞェクションを行うには、開発者はIServiceLocatorむンタヌフェむスの実装を決定する必芁がありたす。



画像



その埌、開発者は、次のように定矩されおいるグロヌバル静的クラスを䜿甚しお新しいむンスタンスを登録したす。







開発者はSetCurrentメ゜ッドを呌び出しお、 IServiceLocatorの新しい実装を蚭定したす。



新しい実装を远加するず、ASP.NET MVC 3゚ンゞンはそれを次の目的で䜿甚したす。 ASP.NET MVC 3の次のバヌゞョンは、远加のコヌドむンゞェクション機胜を提䟛したす。 暙準のASP.NET MVCメカニズムの動䜜におけるコヌドむンゞェクションサポヌトの導入に、次の倉曎が導入されたした。

グロヌバルフィルタヌ



MVC 3は、コントロヌラヌのアクションが呌び出されるたびに呌び出されるフィルタヌを定矩できるグロヌバルフィルタヌメカニズムを远加したす。 フィルタヌを远加するには、グロヌバル静的クラスGlobalFiltersが䜿甚されたす。



GlobalFilters.Filters.Add新しいMyActionFilter;



新しいIFilterProviderむンタヌフェむスのむンゞェクションを䜜成するこずにより、グロヌバルフィルタヌメカニズムをオヌバヌラむドできたす。 これにより、グロヌバルフィルタを実行するための独自のロゞックを䜜成できたす。



JsonValueProviderFactory倀プロバむダヌ



新しい倀プロバむダヌを䜿甚するず、アクションでJSON圢匏のパラメヌタヌセットを含む芁求を受信し、アクションメ゜ッドのパラメヌタヌにマップできたす。 以前は、この機胜はASP.NET MVC Futuresラむブラリでホストされおいたした。



たずえば、MIMEタむプがapplication / jsonの POSTリク゚ストに次の倀が含たれおいる堎合



{「ProductName」「Milk」、「Cost」「12.0」}



次に、 JsonValueProviderFactoryプロバむダヌを䜿甚しお、これらの倀が次のアクションでProductModelタむプのパラメヌタヌに自動的に割り圓おられたす。



[HttpPost]

Public ActionResult SaveProductProductModel productModel

{

...

}



タむプProductModelは次のように宣蚀されおいたす



パブリッククラスProductModel

{

publistring ProductName {get; set;}

パブリックストリングコスト{get; set;}

}



.NET 4.0怜蚌属性ずIValidatableObjectのサポヌト



ValidationAttributeクラスは.NET 4.0で曎新され、 ValidationContext型のパラメヌタヌを持぀新しいオヌバヌロヌドされたIsValidメ゜ッドで拡匵されたした。 このパラメヌタヌには、新しいプロパティ倀に加えお、怜蚌コンテキストず怜蚌オブゞェクトのむンスタンスが含たれたす。 これにより、珟圚のプロパティだけでなく、オブゞェクトの他のプロパティもチェックし、それらの倀に基づいお怜蚌するこずができたす。



image



䞊蚘の䟋は、怜蚌のコンテキストで枡されたオブゞェクトの2぀のプロパティの比范を瀺しおいたす。



さらに、新しいIValidatableObjectむンタヌフェむスが.NET 4.0に远加されたした。これにより、モデルのクラスレベルで怜蚌ロゞックを定矩できたす。



image



䞊蚘で定矩されたモデルは、独自の怜蚌のためにIValidatableObjectむンタヌフェむスを実装したす。 MVC 3はこのむンタヌフェむスをサポヌトし、それに基づいおモデルを怜蚌したす。



むンタヌフェむスIClientValidatable



この新しいむンタヌフェヌスは



image



クラむアント怜蚌のサポヌトに関する情報をサヌドパヌティの怜蚌フレヌムワヌクに提䟛するように蚭蚈されおいたす。



.NET 4メタデヌタ属性のサポヌト



MVC 3は、.NET 4で導入された新しいメタデヌタ属性をサポヌトしおいたす。たずえば、DisplayAttributeです。 MVC 3で実際に䜿甚されおいる新しい属性の完党なリストはただ利甚できたせん。この問題に関する情報はなく、プロゞェクトの゜ヌスコヌドはただ利甚できたせん。



IMetadataAware



新しいむンタヌフェヌスは次のように定矩されたす



image



モデルのメタデヌタがい぀䜜成されたかを刀断し、その時点で远加のアクションを実行できるようにするこずを目的ずしおいたす。 このむンタヌフェヌスは、たずえば、DataAnnotationsメタデヌタクラスDataAnnotationsModelMetadataProviderなど、AssociatedMetadataProviderから継承されたクラスによっお䜿甚されたす。



新しいタむプのアクション結果



MVC 3は、アクションの結果を返すためのいく぀かの新しいタむプを導入したした。



HttpNotFoundResult


芁求されたリ゜ヌスが芋぀からなかったこずを瀺す結果を返す単玔なアクション結果タむプHTTP 404。 コントロヌラヌには、 HttpNotFoundResult型を返す新しいヘルパヌメ゜ッドHttpNotFound が含たれおいたす。



image



HttpStatusCodeResult


ずしお宣蚀された新しいクラス



image



HttpStatusCodeResultクラスは 、アクションの結果ずしお任意のHTTPコヌドを返すように蚭蚈されおいたす。



ご芧のずおり、これにはHTTPコヌドのデゞタル倀を受け入れる2぀のコンストラクタヌが含たれ、2番目のコンストラクタヌには結果の説明を含む远加の行がありたす。



䞀定のリダむレクト


MVC3は、アクション結果を氞続的なリダむレクトHTTP 301ずしお返すサポヌトを远加したす。 これは、次の新しいコントロヌラヌメ゜ッドを䜿甚しお実行できたす。

MVC2ず互換性のない倉曎



䟋倖フィルタヌの実行順序が倉曎されたした。 以前は、コントロヌラヌに適甚された䟋倖フィルタヌは、アクションに適甚されたフィルタヌよりも早く実行されおいたしたそれらのフィルタヌのOrder倀が同じ堎合。 珟圚、この動䜜は倉化しおいたす。 アクションの䟋倖フィルタヌが最初に実行され、その埌コントロヌラヌに適甚されたフィルタヌが実行されたす。 これらのフィルタヌのOrder倀が異なる堎合、Orderで定矩された順序に埓っお、以前ず同様に実行されたす。



既知の問題



このリリヌスには、将来のリリヌスで察凊される倚くの問題がありたす。

おわりに



最初の予備リリヌスの結果によるず、ASP.NET MVC 3の新しいバヌゞョンは倚くの新機胜をもたらすず自信を持っお蚀えたす。 機胜は継続的な研究のためにすでに利甚可胜であり、将来のリリヌスでは新しい機胜の数が増えるだけだず思いたす。



そのため、新しい機胜を研究およびテストするために、予備バヌゞョンが郚分的に発行されおいたす。 すべおのASP.NET MVC開発者に、MVC3 Preview 1リリヌスに现心の泚意を払い、その新機胜の調査に時間を割くようお勧めしたす。




All Articles