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の新しいバージョンに手動でアップグレードするには、以下を実行する必要があります。
- すべてのweb.configファイルで、 System.Web.Mvc、Version = 2.0.0.0の行をSystem.Web.Mvc、Version = 3.0.0.0の行に置き換えます。
- プロジェクトから2番目のバージョンのSystem.Web.Mvcアセンブリへのリンクを削除し、3番目のバージョンのフレームワークのアセンブリを追加します。
- .csprojプロジェクトファイルを編集し、 ProjectTypeGuids要素の値を{F85E285D-A4E0-4152-9332-AB1D724D3325}から{E53F8FEA-EAE0-44A6-8774-FFD645390401}に置き換えます 。
- プロジェクトがASP.NET MVC 2用にコンパイルされたアセンブリを参照する場合、web.configファイルのconfiguatonセクションに次のコードを追加します。

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エンジン(右)を使用して構築されたフォームです。


目を引くRazorの主な違いは、開閉セット「<%%>」がないことです。 実際、
@ usingグループ化
構文にも終了要素は含まれず、末尾の「}」文字のみで表されます。 これとWebFormsバージョンで「<%}%>」を記述する必要性を比較すると、Razor開発の主な焦点が何であるか、コードとその簡潔さを減らすことによる開発者の生産性が理解できます。
特に、Razorの便利さは、コード内にブランチを作成するときに現れます。たとえば、WebFormsとRazorでのコードの例を次に示します。

![画像[40] image[40]](http://microgeek.ru/upload/blog/aspnet/a7b/a7bfce70692963a046ca55754f9aa940.png)
要素「<%%>」を使用してマークアップから条件を克服する必要があるブランチを収集するのは非常に面倒です。 一方、Razorを使用するときのマークアップブランチの調和を見てください。 サイクルなど、他の多くのケースでも同じ利点が実証されています。
Razorには、開始文字と終了文字の構文が異なるだけでなく、違いがあります。 そのため、たとえば、以下はページを構成し、WebFromsのタイトルを設定するためのコードです。

同じコードですが、Razorスタイルのものを以下に示します。

スコット・ガスリーの記事の
この翻訳から、Razor提出エンジンに関する詳細を大幅に学ぶことができます。
Visual Studioでの複数のプレゼンテーションエンジンのサポート
新しいRazorプレゼンテーションエンジンの作成により、MVC開発者は、開発者が使用するメカニズムを選択できるようになりました。 Visual Studioツールは、新しいビューを作成するときにビューエンジンを選択できるようになりました。

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は、次の場所に注入する機能を追加します。
- コントローラーファクトリーの作成。
- コントローラーの作成。
- WebフォームとRazorの両方のプレゼンテーションエンジンの作業のさまざまな段階。
- アクションフィルター
インジェクションを行うには、開発者はIServiceLocatorインターフェイスの実装を決定する必要があります。

その後、開発者は、次のように定義されているグローバル静的クラスを使用して新しいインスタンスを登録します。

開発者は
SetCurrentメソッドを呼び出して、
IServiceLocatorの新しい実装を設定します。
新しい実装を追加すると、ASP.NET MVC 3エンジンはそれを次の目的で使用します。
- コントローラーファクトリとコントローラー自体のインスタンス化。
- プレゼンテーションエンジンおよびプレゼンテーションページ自体のインスタンス化。
- アクションフィルターをインスタンス化します。
ASP.NET MVC 3の次のバージョンは、追加のコードインジェクション機能を提供します。
- モデルバインダーメカニズムの場合。
- 値のプロバイダー(値プロバイダー);
- 検証プロバイダー向け。
- モデルメタデータプロバイダー用。
標準のASP.NET MVCメカニズムの動作におけるコードインジェクションサポートの導入に、次の変更が導入されました。
- ControllerBuilder.GetControllerFactoryは最初にIServiceLocatorの既存の実装にアクセスし、実装がない場合にのみ、コントローラーファクトリを作成するための古いメカニズムを使用します。
- コントローラを作成するとき、 DefaultControllerFactoryは最初にIServiceLocatorの既存の実装を参照し、実装がない場合にのみ、コントローラを作成するための古いメカニズムを使用します。
- 関数DefaultControllerFactory.ReleaseController-コントローラーのリリース-は、 IServiceLocatorの実装を介してのみ行われ、実装がない場合は、特別なインターフェースIMvcServiceLocatorからのデフォルト実装が使用されます。
- 以前のようにViewEngineCollectionを使用すると、ビューエンジンのコレクションを追加できますが、MVC 3ではこれに加えて、このコレクションにはIServiceLocatorの実装で登録されたすべてのビューエンジンが実質的に含まれます。 これはメソッド呼び出しを意味します。 FindViewまたは。 FindPartialViewは、 IServiceLocator実装を使用して手動で追加または定義された一般化された値を返します。
- IServiceLocator実装を使用してページを作成できない場合は、 IServiceLocator実装またはActivator.CreateInstanceを使用した従来の方法を使用してページとコントロールが作成されるように、 WebFormViewが更新されました。
グローバルフィルター
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メソッドで拡張されました。 このパラメーターには、新しいプロパティ値に加えて、検証コンテキストと検証オブジェクトのインスタンスが含まれます。 これにより、現在のプロパティだけでなく、オブジェクトの他のプロパティもチェックし、それらの値に基づいて検証することができます。

上記の例は、検証のコンテキストで渡されたオブジェクトの2つのプロパティの比較を示しています。
さらに、新しい
IValidatableObjectインターフェイスが.NET 4.0に追加
されました。これにより、モデルのクラスレベルで検証ロジックを定義できます。

上記で定義されたモデルは、独自の検証のために
IValidatableObjectインターフェイスを実装します。 MVC 3はこのインターフェイスをサポートし、それに基づいてモデルを検証します。
インターフェイスIClientValidatable
この新しいインターフェースは

クライアント検証のサポートに関する情報をサードパーティの検証フレームワークに提供するように設計されています。
.NET 4メタデータ属性のサポート
MVC 3は、.NET 4で導入された新しいメタデータ属性をサポートしています。たとえば、DisplayAttributeです。 MVC 3で実際に使用されている新しい属性の完全なリストはまだ利用できません。この問題に関する情報はなく、プロジェクトのソースコードはまだ利用できません。
IMetadataAware
新しいインターフェースは次のように定義されます

モデルのメタデータがいつ作成されたかを判断し、その時点で追加のアクションを実行できるようにすることを目的としています。 このインターフェースは、たとえば、DataAnnotationsメタデータクラスDataAnnotationsModelMetadataProviderなど、AssociatedMetadataProviderから継承されたクラスによって使用されます。
新しいタイプのアクション結果
MVC 3は、アクションの結果を返すためのいくつかの新しいタイプを導入しました。
HttpNotFoundResult
要求されたリソースが見つからなかったことを示す結果を返す単純なアクション結果タイプ(HTTP 404)。 コントローラーには、
HttpNotFoundResult型を返す新しいヘルパーメソッド
HttpNotFound ()が含まれています。

HttpStatusCodeResult
として宣言された新しいクラス
HttpStatusCodeResultクラス
は 、アクションの結果として任意のHTTPコードを返すように設計されています。
ご覧のとおり、これにはHTTPコードのデジタル値を受け入れる2つのコンストラクターが含まれ、2番目のコンストラクターには結果の説明を含む追加の行があります。
一定のリダイレクト
MVC3は、アクション結果を永続的なリダイレクト(HTTP 301)として返すサポートを追加します。 これは、次の新しいコントローラーメソッドを使用して実行できます。
- RedirectPermanent-指定されたURLにリダイレクトします。
- RedirectToRoutePermanent-現在のルートにリダイレクトします(または、オプションのパラメーターrouteNameとrouteValuesを指定できます)。
- RedirectToActionPermanent-指定されたアクションにリダイレクトします(オプションのパラメーターcontrollerNameとrouteValuesを指定できます)。
MVC2と互換性のない変更
例外フィルターの実行順序が変更されました。 以前は、コントローラーに適用された例外フィルターは、アクションに適用されたフィルターよりも早く実行されていました(それらのフィルターのOrder値が同じ場合)。 現在、この動作は変化しています。 アクションの例外フィルターが最初に実行され、その後コントローラーに適用されたフィルターが実行されます。 これらのフィルターのOrder値が異なる場合、Orderで定義された順序に従って、以前と同様に実行されます。
既知の問題
このリリースには、将来のリリースで対処される多くの問題があります。
- Visual Studioには、Razorプレゼンテーションエンジン用の構文の強調表示とIntelliSenseのサポートはありません。
- ファイルを編集するときに「コントローラーに移動」機能を使用する方法はありません。 cshtml (カミソリ);
- Razorビューエンジンを使用してコードを編集する場合、Visual Studioスニペットにアクセスできません。
おわりに
最初の予備リリースの結果によると、ASP.NET MVC 3の新しいバージョンは多くの新機能をもたらすと自信を持って言えます。 機能は継続的な研究のためにすでに利用可能であり、将来のリリースでは新しい機能の数が増えるだけだと思います。
そのため、新しい機能を研究およびテストするために、予備バージョンが部分的に発行されています。 すべてのASP.NET MVC開発者に、MVC3 Preview 1リリースに細心の注意を払い、その新機能の調査に時間を割くようお勧めします。