ASP.NET MVC 3 リリース ノート

概要

このドキュメントでは、ASP.NET MVC 3 RTM for Visual Studio 2010 のリリースについて説明します。 ASP.NET MVC は、Model-View-Controller (MVC) パターンを使用する Web アプリケーションを開発するためのフレームワークです。 ASP.NET MVC 3 インストーラーには、次のコンポーネントが含まれています。

  • ASP.NET MVC 3 ランタイム コンポーネント
  • ASP.NET MVC 3 Visual Studio 2010 ツール
  • ランタイム コンポーネントの ASP.NET Web ページ
  • ASP.NET Web ページ Visual Studio 2010 ツール
  • .NET 用 Microsoft パッケージ マネージャー (NuGet)
  • Razor 構文のサポートを有効にする Visual Studio 2010 の更新プログラム。 (詳細については、サポート技術情報の記事「2483190」を参照してください)。

ASP.NET MVC 3 のプレリリース版のすべてのリリース ノートは、次の URL の ASP.NET Web サイトで公開されています。

https://www.asp.net/learn/whitepapers/mvc3-release-notes

インストールに関する注意事項

Web プラットフォーム インストーラー (Web PI) を使用して MVC 3 RTM ASP.NET インストールするには、次のページを参照してください。

https://www.microsoft.com/web/gallery/install.aspx?appid=MVC3

または、次のページから ASP.NET MVC 3 RTM for Visual Studio 2010 のインストーラーをダウンロードできます。

https://go.microsoft.com/fwlink/?LinkID=208140

ASP.NET MVC 3 をインストールでき、ASP.NET MVC 2 と並行して実行できます。

ソフトウェア要件

ASP.NET MVC 3 ランタイム コンポーネントには、次のソフトウェアが必要です。

  • バージョン 4 .NET Framework。

    ASP.NET MVC 3 Visual Studio 2010 ツールには、次のソフトウェアが必要です。

  • Visual Studio 2010 または Visual Web Developer 2010 Express

ドキュメント

ASP.NET MVC のドキュメントは、MSDN Web サイトの次の URL にあります。

https://go.microsoft.com/fwlink/?LinkId=205717

ASP.NET MVC に関するチュートリアルとその他の情報は、ASP.NET Web サイトの MVC ページの次の URL にあります。

https://www.asp.net/mvc/

サポート

このリリースは完全にサポートされています。 テクニカル サポートの取得に関する情報は、Microsoft サポート Web サイトで確認できます。

また、このリリースについての質問はお気軽に ASP.NET MVC フォーラムにお寄せください。このフォーラムでは、ASP.NET コミュニティのメンバーによる非公式のサポートを受けられる場合が多くあります。

https://forums.asp.net/1146.aspx

ASP.NET MVC 2 プロジェクトを mvc 3 Tools Update にアップグレード ASP.NET

ASP.NET MVC 3 は、同じコンピューターに ASP.NET MVC 2 とサイド バイ サイドでインストールできるため、ASP.NET MVC 2 アプリケーションを MVC 3 にアップグレードするタイミングを柔軟 ASP.NET に選択できます。

既存の ASP.NET MVC 2 アプリケーションをバージョン 3 に手動でアップグレードするには、次の手順を実行します。

  1. コンピューターに新しい ASP.NET MVC 3 プロジェクトを作成します。 このプロジェクトには、アップグレードに必要ないくつかのファイルが含まれています。

  2. ASP.NET MVC 3 プロジェクトから次のファイルを ASP.NET MVC 2 プロジェクトの対応する場所にコピーします。 jQuery ライブラリへの参照を更新して、新しいファイル名を参照する必要があります (jQuery-1.5.1.js)。

    • /Views/Web.config
    • /packages.config
    • /scripts/*.js
    • /Content/themes/*.*
  3. 空の ASP.NET MVC 3 プロジェクト ソリューションのルートにある packages フォルダーを、ソリューションの .sln ファイルがあるディレクトリにあるソリューションのルートにコピーします。

  4. ASP.NET MVC 2 プロジェクトに領域が含まれている場合は、/Views/Web.config ファイルを各領域の Views フォルダーにコピーします。

  5. ASP.NET MVC 2 プロジェクトの両方の Web.config ファイル全体で、ASP.NET MVC のバージョンを検索して置き換えます。 次の文字列を検索します。

    System.Web.Mvc, Version=2.0.0.0
    

    これを次のコードに置き換えます。

    System.Web.Mvc, Version=3.0.0.0
    
  6. ソリューション エクスプローラーで、System.Web.Mvc (バージョン 2 から DLL を指す) への参照を削除し、System.Web.Mvc (v3.0.0.0) への参照を追加します。

  7. System.Web.WebPages.dllとSystem.Web.Helpers.dllへの参照を追加します。 これらのアセンブリは、次のフォルダーに保存されています。

    • %ProgramFiles%\ Microsoft ASP.NET\ASP.NET MVC 3\Assemblies
    • %ProgramFiles%\ Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies
  8. ソリューション エクスプローラーで、プロジェクト名を右クリックし、[プロジェクトのアンロード] を選択します。 次に、もう一度プロジェクト名を右クリックし、[ ProjectName.csproj の編集] を選択します。

  9. ProjectTypeGuids 要素を見つけて、{F85E285D-A4E0-4152-9332-AB1D724D3325} を {E53F8FEA-EAE0-44A6-8774-FFD645390401} に置き換えます。

  10. 変更を保存してプロジェクトを右クリックし、[プロジェクトの再読み込み] をクリックします。

  11. アプリケーションのルート Web.config ファイルで、 [アセンブリ ] セクションに次の設定を追加します。

    <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, 
         PublicKeyToken=31BF3856AD364E35" />
    
    <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral,
         PublicKeyToken=31BF3856AD364E35" />
    
  12. プロジェクトが、ASP.NET MVC 2 を使用してコンパイルされたサード パーティ製ライブラリを参照している場合は、次の強調表示された bindingRedirect 要素を、 構成 セクションのアプリケーション ルートのWeb.config ファイルに追加します。

    <runtime>
       <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
           <assemblyIdentity name="System.Web.Mvc"
               publicKeyToken="31bf3856ad364e35"/>
           <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0"/>
         </dependentAssembly>
       </assemblyBinding>
    </runtime>
    

ASP.NET MVC 3 Tools Update の変更点

このセクションでは、ASP.NET MVC 3 RTM リリース以降に追加された ASP.NET MVC 3 Tools Update リリースでの変更点について説明します。

[コントローラーの追加] ダイアログ ボックスで、ビューとデータ アクセス コードを使用したコントローラーのスキャフォールディングが可能に

スキャフォールディングを使用すると、アプリケーションのコントローラーとビューをすばやく生成できます。 コードが生成されたら、プロジェクトの要件を満たすようにコードを編集できます。

ASP.NET MVC 3 で [コントローラーの追加] ダイアログ ボックスを起動するには、ソリューション エクスプローラーControllers フォルダーを右クリックし、[追加] をクリックし、[コントローラー] をクリックします。 このダイアログ ボックスには、新たにスキャフォールディング オプションが追加されています。

[コントローラーの追加] ダイアログ ボックスのスクリーンショット。

既定では、3 種類のスキャフォールディング テンプレートが表示されます。

空のコントローラー

このテンプレートは、空のコントローラー ファイルを生成します。 このテンプレートは、以前のバージョンの ASP.NET MVC で 作成、編集、詳細、削除のシナリオに対するアクションの追加 をチェックしないのと同じです。 このテンプレートを選択した場合、その他のオプションは利用できません。

空の読み取り/書き込み操作のあるコントローラー

このテンプレートは、実装コードが設定されていませんが、必要なアクション メソッドがすべてあるコントローラー ファイルを生成します。 このテンプレートは、以前のバージョンの ASP.NET MVC での 作成、編集、詳細、削除のシナリオのアクションの追加 に関するチェック ボックスをオンにすることと同じです。 このテンプレートを選択した場合、その他のオプションは利用できません。

Entity Framework を使用した、読み取り/書き込み操作とビューのあるコントローラー

このテンプレートでは、運用可能なデータ入力ユーザー インターフェイスをすばやく作成できます。 次のような、さまざまな一般的な要件やシナリオに対応するコードが生成されます。

  • データ アクセス。 生成されたコードは、データベースのエンティティの読み取りおよび書き込みを行います。 既存のデータ コンテキスト クラスを選択した場合、またはテンプレートに新しい DbContext クラスを生成させる場合は、Entity Framework Code First アプローチで動作します。 また、既存の ObjectContext クラスを選択した場合は、Entity Framework Database First または Model First アプローチでも機能します。

  • 検証。 生成されたコードは、ASP.NET MVC モデル バインディング機能とメタデータ機能を使用して、モデル クラスで宣言している規則に従ってフォーム送信が検証されるようにします。 これには、 必須 属性や StringLength 属性などの組み込みの検証規則、およびカスタム検証規則が含まれます。

  • 一対多リレーションシップ。 モデル クラス間に一対多外部キーリレーションシップを定義する場合、生成されたコードは関連エンティティを選択するためのドロップダウン リストを生成します。 たとえば、Entity Framework Code First 規約に従って、次のモデル クラスを定義するとします。

    public class Product
    {
         public int ProductId { get; set; }
         [Required]
         public string Name { get; set; }
    
         // Product belongs to Category
         public int CategoryId { get; set; }
         public virtual Category Category { get; set; }
    }
    public class Category
    {
         public int CategoryId { get; set; }
         [Required]
         public string Name { get; set; }
    }
    

    その後、Product クラスのコントローラーをスキャフォールディングすると、そのビューを使用して、ユーザーは各 Product インスタンスの Category オブジェクトを選択できます。

    このテンプレートを使用すると、[ コントローラーの追加 ] ダイアログ ボックスで追加のオプションが有効になります。 [モデル クラス] では、ソリューション内の任意のモデル クラスを選択できます。これにより、ユーザーが作成または編集できるデータの種類が決まります。

  • Entity Framework Code First を使用する場合は、どのモデル クラスを選択してもかまいません。

  • Entity Framework Database First または Entity Framework Model First を使用する場合は、必ず、概念モデルに定義されているエンティティ クラスを選択してください。

データ コンテキスト クラスの場合は、次の選択を行うことができます。

  • Code First を使用し、既存のデータ コンテキスト クラスがない場合は、**[新しいデータ コンテキスト] ** を選択します。 これにより、データ コンテキスト クラスが自動的に生成されます。
  • Code First を使用する場合に既存のデータ コンテキストがある場合は、そのコンテキストを選択します。 選択したモデル クラスを保持するように、コンテキストが更新されます。
  • Database First または Model First を使用する場合は、オブジェクト コンテキスト クラスを選択します。

[ビュー] では、使用するビュー エンジンを選択するか、ビューのスキャフォールディングを行わない場合は [なし] を選択します。

[詳細オプション] を選択して、生成されたビューの追加オプションを指定できます。 たとえば、使用するレイアウトやマスター ページを選択できます。

[新しい ASP.NET MVC 3 プロジェクト] ダイアログ ボックスの機能強化

新しい ASP.NET MVC 3 プロジェクトの作成に使用するダイアログ ボックスには、次の機能強化が施されています。

[新しいプロジェクト] ダイアログ ボックスのスクリーンショット。[イントラネット アプリケーション] アイコンとチェックボックス [Use H T M L 5 semantic markup]\(H T M L 5 セマンティック マークアップを使用する\) が強調表示されています。

"イントラネット プロジェクト" テンプレートの導入

[プロジェクト テンプレート] の一覧に、"イントラネット アプリケーション" テンプレートが加わりました。 このテンプレートには、フォーム認証ではなく Windows 認証を使用する Web アプリケーションを作成するための設定が含まれています。 イントラネット アプリケーションには、プロジェクト テンプレートにカプセル化できない IIS 設定がいくつか必要であるため、このテンプレートには、IIS でプロジェクト テンプレートを動作させる方法を示す readme ファイルが含まれています。 新しいイントラネット アプリケーション テンプレートのドキュメントは、MSDN Web サイトの次の URL にあります。

https://msdn.microsoft.com/library/gg703322(VS.98).aspx

プロジェクト テンプレートが HTML5 に対応

プロジェクトの新規作成ダイアログ ボックスに、HTML5 固有の機能をプロジェクト テンプレートに追加するオプションが追加されました。 オプションを選択すると、新しい HTML5 <header><footer>および <navigation> 要素を含むビューが生成されます。

ただし、古いバージョンのブラウザーでは、HTML5 固有のタグがサポートされていないことに注意してください。 この制限に対応するため、HTML5 プロジェクト テンプレートには、Modernizr ライブラリへの参照が含まれています (次のセクションを参照してください)。

プロジェクト テンプレートに Modernizr 1.7 が含まれるようになりました

Modernizr は、CSS 3 および HTML5 に対応していないブラウザーでこれらの機能をサポートできるようにする JavaScript ライブラリです。 このライブラリは、ASP.NET MVC 3 プロジェクトのテンプレートに、NuGet プレインストール パッケージとして含まれています。 Modernizr の詳細については、「」を参照してください http://www.modernizr.com/

プロジェクト テンプレートの jQuery、jQuery UI、および jQuery Validation のバージョンが新しく

プロジェクト テンプレートの jQuery スクリプトが次のバージョンになりました。

  • jQuery 1.5.1
  • jQuery Validation 1.8
  • jQuery UI 1.8.11

これらのライブラリは、NuGet プレインストール パッケージとして含まれています。

プロジェクト テンプレートに、ADO.NET Entity Framework 4.1 がプレインストールされた NuGet パッケージとして含まれるようになりました

ADO.NET Entity Framework 4.1 には、Code First 機能があります。 Code First は既存の Database First パターンや Model First パターンに代えて使用できる ADO.NET Entity Framework の新しい開発パターンです。

Code First は、Visual Basic または C# で記述された POCO クラス ("plain old CLR object") を使用するモデルを定義するための機能です。 これらのクラスは、既存のデータベースにマップするか、データベース スキーマの生成に使用できます。 追加の構成は、 DataAnnotations 属性を使用するか、fluent API を使用して指定できます。

Code Firstwith ASP.NET MVC の使用に関するドキュメントは、ASP.NET Web サイトの次の URL で入手できます。

https://www.asp.net/mvc/tutorials/getting-started-with-mvc3-part1-cs https://www.asp.net/entity-framework/tutorials/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application

プロジェクト テンプレートに、NuGet プレインストール パッケージとして JavaScript ライブラリが追加

新しい ASP.NET MVC 3 プロジェクトを作成した場合に、スクリプトを直接プロジェクト テンプレート コンテンツの Scripts フォルダーに追加するのではなく、NuGet を使用して前述の JavaScript ファイル (Modernizr ライブラリ) をインストールすると、プロジェクトにはこれらのライブラリが含まれます。 これにより、スクリプトの新しいバージョンがリリースされたときに、NuGet を使用してスクリプトを最新バージョンに更新できます。

たとえば、jQuery の新しいリリースが提供される頻度を考えると、プロジェクトに含まれる jQuery のバージョンは、ある時点で古くなります。 しかし、jQuery はインストール済みの NuGet パッケージとして含まれているため、jQuery の新しいバージョンが公開されると NuGet のダイアログ ボックスによって通知されます。

jQuery にはファイル名にバージョン番号が含まれているため、jQuery を最新バージョンに更新するには、jQuery ファイルを <script> 参照するタグを更新して新しいファイル名を使用する必要もあります。 プロジェクトに含まれるその他のスクリプト ライブラリでは、スクリプト名にバージョン番号は含まれていないため、より簡単に最新バージョンに更新できます。

ASP.NET MVC 3 の既知の問題

  • 場合によっては、"インストールがエラー コード (0x80070643) で失敗しました" というエラー メッセージでインストールが失敗することがあります。 この問題を回避する方法については、 サポート技術情報の記事「2531566」を参照してください。
  • コントローラーを追加するためのスキャフォールディングでは、Entity Framework 内のエンティティ継承サポートを利用するエンティティはスキャフォールディングされません。 たとえば、Student クラスによって継承される基本 Person クラスを指定すると、Student クラスをスキャフォールディングすると、コンパイルされないコードが生成されます。
  • ソリューション フォルダー内に新しい ASP.NET MVC 3 プロジェクトを作成すると、 NullReferenceException エラーが発生します。 回避策として、ソリューションのルートに ASP.NET MVC 3 プロジェクトを作成して、このプロジェクトをソリューション フォルダーに移動してください。
  • Razor 構文の IntelliSense は、ReSharper がインストールされていると機能しません。 ReSharper がインストールされていて、ASP.NET MVC 3 で Razor IntelliSense のサポートを利用する場合は、Hadi Hariri のブログの 「Razor Intellisense と ReSharper 」のエントリを参照してください。ここでは、それらを今日一緒に使用する方法について説明します。
  • インストール中にライセンス条項への同意を確認するためのダイアログ ボックスで、意図したよりも小さいウィンドウにライセンス条項が表示されます。
  • Razor ビュー (.cshtml または ) を編集する場合。vbhtml ファイル)、ビュー。 ASP.NET MVC 3 には、Razor ビューのスニペットは含まれていません。ASP.NET MVC のコード スニペットを選択すると、 のスニペットが表示されます
  • Visual Studio がインストールされていないコンピューター ASP.NET MVC 3 for Visual Web Developer Express をインストールし、後で Visual Studio をインストールする場合は、MVC 3 ASP.NET 再インストールする必要があります。 Visual Studio と Visual Web Developer Express は、ASP.NET MVC 3 インストーラーによってアップグレードされたコンポーネントを共有します。 同様に、Visual Web Developer Express がインストールされていないコンピューターに、ASP.NET MVC 3 for Visual Studio をインストールし、その後 Visual Web Developer Express をインストールする場合も、この問題に該当します。

ASP.NET MVC 3 RTM の変更点

このセクションでは、RC2 リリース以降の ASP.NET MVC 3 RTM リリースで行われた変更とバグ修正について説明します。

変更: jQuery UI のバージョンを 1.8.7 に更新しました

Visual Studio 用の ASP.NET MVC プロジェクト テンプレートが更新され、jQuery UI ライブラリの最新バージョンが含まれています。 テンプレートには、関連付けられている CSS ファイルやイメージ ファイルなど、jQuery UI で必要な最小限のリソース ファイルのセットも含まれています。

変更: 既定の ModelMetadataProvider を DataAnnotationsModelMetadataProvider に変更しました

ASP.NET MVC 3 の RC2 リリースでは 、CachedDataAnnotationsMetadataProvider クラスが導入されました。このクラスでは、パフォーマンス向上として、既存の DataAnnotationsModelMetadataProvider クラスの上にキャッシュが提供されました。 ただし、この実装ではいくつかのバグが報告されたため、変更は元に戻され、 ASP.NET WebStack で使用できる MVC Futures プロジェクトに移動されました。

修正済み: 空白を含む Razor 式の一部を貼り付けた場合、反転する

ASP.NET MVC 3 のプレリリース バージョンでは、空白を含む Razor 式の一部を Razor ファイルに貼り付けると、結果の式が逆になります。 たとえば、次の Razor コード ブロックを考えてみましょう。

@SomeMethod("first param",
100)
@AnotherMethod()

最初のメソッドでテキスト "first param" を選択し、引数として 2 番目のメソッドに貼り付けると、結果は次のようになります。

@AnotherMethod(param""first)

正しい動作は、貼り付け操作の結果として次のようになります。

@AnotherMethod("first param")

この問題は RTM リリースで修正され、貼り付け操作中に式が正しく保持されるようになりました。

修正済み: エディターで開かれた Razor ファイルの名前を変更すると、構文の色付けと IntelliSense が無効になる

エディター ウィンドウでファイルを開いているときにソリューション エクスプローラーを使用して Razor ファイルの名前を変更すると、構文が強調表示され、IntelliSense がそのファイルの動作を停止します。 これは、名前の変更後に強調表示と IntelliSense が維持されるように修正されました。

ASP.NET MVC 3 RTM の既知の問題

  • NuGet パッケージ マネージャー コンソールが開いているときに Visual Studio 2010 SP1 ベータ版を閉じると、Visual Studio がクラッシュして再起動が試みられます。 これは、Visual Studio 2010 SP1 の RTM リリースで修正される予定です。
  • ASP.NET MVC 3 インストーラーは、NuGet パッケージ マネージャーの初期バージョンのみをインストールできます。 初期バージョンをインストールしたら、Visual Studio 拡張機能マネージャーを使用して NuGet をインストールして更新できます。 NuGet が既にインストールされている場合は、Visual Studio 拡張機能ギャラリーに移動して、最新バージョンの NuGet に更新します。
  • ソリューション フォルダー内に新しい ASP.NET MVC 3 プロジェクトを作成すると、 NullReferenceException エラーが発生します。 回避策として、ソリューションのルートに ASP.NET MVC 3 プロジェクトを作成して、このプロジェクトをソリューション フォルダーに移動してください。
  • インストーラーの完了には、以前のバージョンの ASP.NET MVC よりもはるかに長い時間がかかる場合があります。 これは、Visual Studio 2010 のコンポーネントを更新するためです。
  • Razor 構文の IntelliSense は、ReSharper がインストールされていると機能しません。 ReSharper がインストールされていて、ASP.NET MVC 3 で Razor IntelliSense のサポートを利用する場合は、Hadi Hariri のブログの 「Razor Intellisense と ReSharper 」のエントリを参照してください。ここでは、それらを今日一緒に使用する方法について説明します。
  • ベータ 版の ASP.NET MVC 3 で作成された CCSHTML ビューと VBHTML ビューでは、ビルド アクションが正しく設定されていないため、プロジェクトの発行時にこれらのビューの種類が省略されます。 これらのファイルのビルド アクションの値は、"Content" に設定する必要があります。 ASP.NET MVC 3 RTM では、新しいファイルのこの問題は修正されますが、プレリリース バージョンで作成されたプロジェクトの既存のファイルの設定は修正されません。
  • ビルド アクション メニューが開いている [プロパティ] ダイアログ ボックスのスクリーンショット。コンテンツ オプションが選択されています。
  • インストール中にライセンス条項への同意を確認するためのダイアログ ボックスで、意図したよりも小さいウィンドウにライセンス条項が表示されます。
  • Razor ビュー (.cshtml ファイル) を編集している場合、Visual Studio の [コントローラーに移動] メニュー項目は使用できなくなり、コード スニペットはありません。
  • Visual Studio がインストールされていないコンピューター ASP.NET MVC 3 for Visual Web Developer Express をインストールし、後で Visual Studio をインストールする場合は、MVC 3 ASP.NET 再インストールする必要があります。 Visual Studio と Visual Web Developer Express は、ASP.NET MVC 3 インストーラーによってアップグレードされたコンポーネントを共有します。 同様に、Visual Web Developer Express がインストールされていないコンピューターに、ASP.NET MVC 3 for Visual Studio をインストールし、その後 Visual Web Developer Express をインストールする場合も、この問題に該当します。

ASP.NET MVC 3 の破壊的変更

  • 以前のバージョンの ASP.NET MVC では、いくつかのケースを除き、アクション フィルターは要求ごとに作成されます。 この動作は保証された動作ではなく、単なる実装の詳細であり、フィルターのコントラクトではステートレスと見なされていました。 ASP.NET MVC 3 では、フィルターはより積極的にキャッシュされます。 そのため、インスタンスの状態を不適切に格納するカスタム アクション フィルターが壊れる可能性があります。
  • 同じ Order 値を持つ例外フィルターの例外フィルターの実行順序が変更されました。 ASP.NET MVC 2 以前では、アクション メソッドの Order 値と同じ Order 値を持つコントローラーの例外フィルターは、アクション メソッドの例外フィルターの前に実行されます。 これは通常、 指定された Order 値なしで例外フィルターが適用される場合です。 ASP.NET MVC 3 では、最も限定的な例外ハンドラーが最初に実行されるように、この順序が逆になりました。 以前のバージョンと同様に、 Order プロパティが明示的に指定されている場合、フィルターは指定した順序で実行されます。
  • FileExtensions という名前の新しいプロパティが VirtualPathProviderViewEngine 基底クラスに追加されました。 (名前ではなく) パスでビューを検索 ASP.NET 場合、この新しいプロパティで指定されたリストに含まれるファイル拡張子を持つビューのみが考慮されます。 これは、Web フォーム ビューのカスタム ファイル拡張子を有効にするためにカスタム ビルド プロバイダーが登録され、プロバイダーが名前ではなく完全なパスを使用してそれらのビューを参照するアプリケーションの破壊的変更です。 回避策は、 FileExtensions プロパティの値を変更して、カスタム ファイル拡張子を含めます。
  • IControllerFactory インターフェイスを直接実装するカスタム コントローラー ファクトリの実装では、このリリースでインターフェイスに追加された新しい GetControllerSessionBehavior メソッドの実装を提供する必要があります。 一般に、このインターフェイスを直接実装せず、代わりに DefaultControllerFactory からクラスを派生することをお勧めします。

ASP.NET MVC 3 RC2 の変更点

このセクションでは、RC リリース以降の ASP.NET MVC 3 RC2 リリースで行われた変更 (新機能とバグ修正) について説明します。

プロジェクト テンプレートが jQuery 1.4.4、jQuery Validation 1.7、jQuery UI 1.8.6 を含むように変更されました

ASP.NET MVC 3 のプロジェクト テンプレートに、jQuery、jQuery Validation、jQuery UI の最新バージョンが含まれるようになりました。jQuery UI は、プロジェクト テンプレートに新たに追加されたものであり、便利なユーザー インターフェイス ウィジェットを提供します。 jQuery UI の詳細については、ホームページを参照してください。 http://jqueryui.com/

"AdditionalMetadataAttribute" クラスを追加しました

AdditionalMetadataAttribute クラスを使用して、モデル プロパティの ModelMetadata.AdditionalValues ディクショナリを設定できます。

たとえば、ビュー モデルに、管理者にのみ表示する必要があるプロパティがあるとします。 そのモデルには、次の例に示すように、AdminOnly をキーとして使用し、値として true を使用して、新しい属性で注釈を付けることができます。

public class ProductViewModel {
    [AdditionalMetadata("AdminOnly", true)]
    public string RefundCode {get; set;}
}

このメタデータは、製品ビュー モデルがレンダリングされるときに、任意の表示またはエディター テンプレートで使用できるようになります。 メタデータ情報を解釈するのは、アプリケーション開発者次第です。

ビューのスキャフォールディングの改善

ビューのスキャフォールディングに使用される T4 テンプレートは、TextBoxFor などのヘルパーではなく、EditorFor などのテンプレート ヘルパー メソッドの呼び出しを生成するようになりました。 この変更により、[ビューの追加] ダイアログ ボックスでビューが生成されるときに、データ注釈属性の形式でモデルのメタデータのサポートが向上します。

ビューの追加スキャフォールディングには、規則に基づいて、モデルの主キー情報の検出と使用が改善されています。 たとえば、[ビューの追加] ダイアログ ボックスでは、この情報を使用して、主キーの値が編集可能なフォーム フィールドとしてスキャフォールディングされないようにします。

既定の [編集] テンプレートと [作成] テンプレートには、クライアントの検証に必要な jQuery スクリプトへの参照が含まれます。

Html.Raw メソッドを追加しました

既定では、Razor ビュー エンジンはすべての値を HTML エンコードします。 たとえば、次のコード スニペットは、greeting 変数内の HTML をエンコードして、ページに として <strong>Hello World!</strong>表示されるようにします。

@{
  string greeting = "<strong>Hello World!</strong>";
}

<p>@greeting</p>

新しい Html.Raw メソッドは、コンテンツが安全であることが判明した場合に、エンコードされていない HTML を簡単に表示する方法を提供します。 次の例では、同じ文字列が表示されますが、文字列はマークアップとしてレンダリングされます。

@{
  string greeting = "<strong>Hello World!</strong>";
}

<p>@Html.Raw(greeting)</p>

"Controller.ViewModel" プロパティと "View" プロパティの名前が "ViewBag" に変更されました

以前は、ControllerViewModel プロパティはビューの View プロパティに対応していました。 これらのプロパティはどちらも、動的プロパティ アクセサー構文を使用して ViewDataDictionary オブジェクトの値にアクセスする方法を提供します。 混乱を避け、一貫性を保つために、両方のプロパティの名前が同じに変更されました。

"ControllerSessionStateAttribute" クラスの名前を "SessionStateAttribute" に変更しました

ControllerSessionStateAttribute クラスは、ASP.NET MVC 3 の RC リリースで導入されました。 プロパティの名前が簡潔に変更されました。

RemoteAttribute の "Fields" プロパティの名前が "AdditionalFields" に変更されました

RemoteAttribute クラスの Fields プロパティは、ユーザー間で混乱を引き起こしました。 このプロパティの名前を AdditionalFields に変更すると、その意図が明確になります。

"SkipRequestValidationAttribute" の名前を "AllowHtmlAttribute" に変更しました

SkipRequestValidationAttribute 属性の名前が AllowHtmlAttribute に変更され、目的の使用方法をより適切に表現できます。

最初の有用なエラー メッセージを表示するように "Html.ValidationMessage" メソッドを変更しました

Html.ValidationMessage メソッドは、単に最初のエラーを表示するのではなく、最初の有用なエラー メッセージを表示するように修正されました。

モデル バインド中、 ModelState ディクショナリは、モデル自体 ( IValidatableObject を実装している場合)、プロパティに適用された検証属性、およびプロパティへのアクセス中にスローされる例外など、プロパティに関するエラー メッセージを含む複数のソースから設定できます。

Html.ValidationMessage メソッドは、検証メッセージを表示すると、例外を含むモデル状態エントリをスキップします。これらは通常、エンド ユーザー向けではありません。 代わりに、 メソッドは例外に関連付けられていない最初の検証メッセージを検索し、そのメッセージを表示します。 このようなメッセージが見つからない場合、既定では、最初の例外に関連付けられている汎用エラー メッセージが表示されます。

ドキュメントに空白文字を追加しない宣言を修正しました@model

以前のリリースでは、 @model ビューの上部にある宣言によって、レンダリングされた HTML 出力に空白行が追加されました。 これは、宣言で空白が導入されないように修正されています。

Engine-Specific ファイル名をサポートするために、ビュー エンジンに "FileExtensions" プロパティを追加しました

ビュー エンジンは、次の例のように、明示的なビュー パスを使用してビューを返すことができます。

return View("~/views/home/index.cshtml");

最初のビュー エンジンは常にビューのレンダリングを試みます。 既定では、Web Forms ビュー エンジンは最初のビュー エンジンです。Web Forms エンジンは Razor ビューをレンダリングできないため、エラーが発生します。 ビュー エンジンに、サポートするファイル拡張子を指定するために使用される FileExtensions プロパティが追加されました。 このプロパティは、ビュー エンジンがファイル ASP.NET レンダリングできるかどうかを判断するときにチェックされます。 これは破壊的変更であり、詳細については、このドキュメントの「 破壊的変更 」セクションに含まれています。

"For" 属性の正しい値を出力する "LabelFor" ヘルパーを修正しました

LabelFor メソッドが、ID ではなく入力要素の name 属性に一致する for 属性をレンダリングするバグを修正しました。 W3C によると、 for 属性は 入力 要素の ID と一致している必要があります。

モデル バインド中に明示的な値を優先する "RenderAction" メソッドを修正しました

以前のバージョンでは、 RenderAction メソッドに渡された明示的な値は無視され、子アクション内のモデル バインド中に現在のフォーム値が優先されていました。 この修正により、モデル バインド中に明示的な値が優先されます。

ASP.NET MVC 3 RC2 の破壊的変更

  • 以前のバージョンの ASP.NET MVC では、いくつかのケースを除き、要求ごとにアクション フィルターが作成されていました。 この動作は保証された動作ではありませんでしたが、単に実装の詳細であり、フィルターのコントラクトではステートレスと見なされていました。 ASP.NET MVC 3 では、フィルターはより積極的にキャッシュされます。 そのため、インスタンスの状態を不適切に格納するカスタム アクション フィルターが壊れている可能性があります。
  • 例外フィルターの実行順序が、同じ Order 値を持つ例外フィルターに対して変更されました。 ASP.NET MVC 2 以前では、アクション メソッドと同じ Order 値を持つコントローラーの例外フィルターは、アクション メソッドの例外フィルターの前に実行されました。 これは通常、 指定された Order 値なしで例外フィルターが適用された場合です。 ASP.NET MVC 3 では、最も限定的な例外ハンドラーが最初に実行されるように、この順序が逆になりました。 以前のバージョンと同様に、 Order プロパティが明示的に指定されている場合、フィルターは指定した順序で実行されます。
  • FileExtensions という名前の新しいプロパティが VirtualPathProviderViewEngine 基本クラスに追加されました。 ASP.NET パスでビューを検索する場合 (名前ではなく)、この新しいプロパティで指定されたリストに含まれるファイル拡張子を持つビューのみが考慮されます。 これは、Web フォーム ビューのカスタム ファイル拡張子を有効にするためにカスタム ビルド プロバイダーが登録され、プロバイダーが名前ではなく完全なパスを使用してそれらのビューを参照するアプリケーションの破壊的変更です。 回避策は、 FileExtensions プロパティの値を変更して、カスタム ファイル拡張子を含めます。
  • IControllerFactory インターフェイスを直接実装するカスタム コントローラー ファクトリの実装では、このリリースでインターフェイスに追加された新しい GetControllerSessionBehavior メソッドの実装を提供する必要があります。 一般に、このインターフェイスを直接実装せず、代わりに DefaultControllerFactory からクラスを派生することをお勧めします。

ASP.NET MVC 3 RC2 の既知の問題

  • ASP.NET MVC 3 インストーラーは、NuGet パッケージ マネージャーの初期バージョンのみをインストールできます。 初期バージョンをインストールしたら、Visual Studio 拡張機能マネージャーを使用して NuGet をインストールして更新できます。 NuGet が既にインストールされている場合は、Visual Studio 拡張機能ギャラリーに移動して、最新バージョンの NuGet に更新します。
  • ソリューション フォルダー内に新しい ASP.NET MVC 3 プロジェクトを作成すると、 NullReferenceException エラーが発生します。 回避策として、ソリューションのルートに ASP.NET MVC 3 プロジェクトを作成して、このプロジェクトをソリューション フォルダーに移動してください。
  • インストーラーの完了には、以前のバージョンの ASP.NET MVC よりもはるかに長い時間がかかる場合があります。 これは、Visual Studio 2010 のコンポーネントを更新するためです。
  • Razor 構文の IntelliSense は、ReSharper がインストールされていると機能しません。 ReSharper がインストールされていて、ASP.NET MVC 3 RC2 で Razor IntelliSense のサポートを利用する場合は、Hadi Hariri のブログの 「Razor Intellisense と ReSharper 」のエントリを参照してください。この記事では、それらを今日一緒に使用する方法について説明しています。
  • ベータ 版の ASP.NET MVC 3 で作成された CSHTML ビューと VBHTML ビューでは、ビルド アクションが正しく設定されていないため、プロジェクトの発行時にこれらのビューの種類が省略されます。 これらのファイルの [ビルド アクション] の値を [コンテンツ] に設定する必要があります。 ASP.NET MVC 3 RC2 では、新しいファイルのこの問題は修正されますが、ベータ版で作成されたプロジェクトの既存のファイルの設定は修正されません。[プロパティ] ダイアログ ボックスのスクリーンショット。ビルド アクション メニューが開き、コンテンツ オプションが選択されています。
  • インストール中にライセンス条項への同意を確認するためのダイアログ ボックスで、意図したよりも小さいウィンドウにライセンス条項が表示されます。
  • Razor ビュー (.cshtml ファイル) を編集している場合、Visual Studio の [コントローラーに移動] メニュー項目は使用できません。また、コード スニペットもありません。
  • Visual Studio がインストールされていないコンピューター ASP.NET MVC 3 for Visual Web Developer Express をインストールし、後で Visual Studio をインストールする場合は、MVC 3 ASP.NET 再インストールする必要があります。 ASP.NET MVC 3 インストーラーによってアップグレードされた Visual Studio と Visual Web Developer Express の共有コンポーネント。 同様に、Visual Web Developer Express がインストールされていないコンピューターに、ASP.NET MVC 3 for Visual Studio をインストールし、その後 Visual Web Developer Express をインストールする場合も、この問題に該当します。
  • 既 ASP.NET インストールしている場合、MVC 3 RC 2 をインストールしても NuGet は更新されません。 NuGet をアップグレードするには、Visual Studio 拡張機能マネージャーに移動し、使用可能な更新プログラムとして表示されます。 そこから NuGet を最新リリースにアップグレードできます。

ASP.NET MVC 3 リリース候補

ASP.NET MVC リリース候補は、2010 年 11 月 9 日にリリースされました。

ASP.NET MVC 3 RC の新機能

このセクションでは、ベータ リリース以降に ASP.NET MVC 3 RC リリースで導入された機能について説明します。

NuGet パッケージ マネージャー

ASP.NET MVC 3 には、Visual Studio プロジェクトにライブラリとツールを追加するための統合パッケージ管理ツールである NuGet パッケージ マネージャー (旧称 NuPack) が含まれています。 このツールを使用すると、開発者がライブラリをソース ツリーに取り込む際に現在実行する手順が自動化されます。

コマンド ライン ツールとして、Visual Studio 2010 内の統合コンソール ウィンドウ、Visual Studio コンテキスト メニュー、および PowerShell コマンドレットのセットとして NuGet を操作できます。

NuGet の詳細については、 Nuget のドキュメントを参照してください

[新しいプロジェクト] ダイアログ ボックスの改善

新しいプロジェクトを作成すると、[新しいプロジェクト] ダイアログ ボックスで、ビュー エンジンと ASP.NET MVC プロジェクトの種類を指定できるようになりました。

新しいプロジェクト ダイアログ ボックスのスクリーンショット。ビュー エンジン メニューが開き、Razor が選択されています。

ダイアログ ボックスに表示されるテンプレートとビュー エンジンの一覧の変更のサポートは、このリリースに含まれています。

既定のテンプレートは次のとおりです。

空白。 ASP.NET MVC プロジェクトの既定のディレクトリ構造、既定の ASP.NET MVC スタイルを含む Site.css ファイル、既定の JavaScript ファイルを含む Scripts ディレクトリなど、ASP.NET MVC プロジェクトの最小限のファイル セットが含まれます。

インターネット アプリケーション。 ASP.NET MVC でメンバーシップ プロバイダーを使用する方法を示すサンプル機能が含まれています。

ダイアログ ボックスに表示されるプロジェクト テンプレートの一覧は、Windows レジストリで指定されます。

セッションレス コントローラー

新しい ControllerSessionStateAttribute では、 System.Web.SessionState.SessionStateBehavior 列挙値を指定することで、コントローラーのセッション状態の動作をより細かく制御できます。

次の例は、コントローラーに対するすべての要求のセッション状態をオフにする方法を示しています。

[ControllerSessionState(SessionStateBehavior.Disabled)]
public class CoolController : Controller {
    public ActionResult Index() {
        object o = Session["Key"]; // Causes an exception.

    }
}

次の例は、コントローラーに対するすべての要求に対して読み取り専用セッション状態を設定する方法を示しています。

[ControllerSessionState(SessionStateBehavior.ReadOnly)]
public class CoolController : Controller {
    public ActionResult Index() {
    Session["Key"] = "value"; // Value is not available in
    the next request
    }
}

新しい検証属性

CompareAttribute

新しい CompareAttribute 検証属性を使用すると、モデルの 2 つの異なるプロパティの値を比較できます。 次の例では、 有効にするために ComparePassword プロパティが Password フィールドと一致している必要があります。

public class User {
    [Required]

    public string Password { get; set; }
    [Required, Compare("Password")]
    public string ComparePassword { get; set; }
}

RemoteAttribute

新しい RemoteAttribute 検証属性は、jQuery 検証プラグインのリモート検証機能を利用します。これにより、クライアント側の検証で、実際の検証ロジックを実行するメソッドをサーバー上で呼び出します。

次の例では、 UserName プロパティに RemoteAttribute が適用されています。 編集ビューでこのプロパティを編集すると、このフィールドを検証するために、クライアント検証によって UsersController クラスで UserNameAvailable という名前のアクションが呼び出されます。

public class User {
    [Remote("UserNameAvailable", "Users")]
    public string UserName { get; set; }
}

次の例は、対応するコントローラーを示しています。

public class UsersController {
    public bool UserNameAvailable(string username) {
        if(MyRepository.UserNameExists(username)) {
            return "false";
        }
        return "true";
    }
}

既定では、属性が適用されるプロパティ名は、クエリ文字列パラメーターとしてアクション メソッドに送信されます。

"LabelFor" メソッドと "LabelForModel" メソッドの新しいオーバーロード

ラベル テキストを指定できる LabelFor メソッドと LabelForModel メソッドに新しいオーバーロードが追加されました。 次の例は、これらのオーバーロードを使用する方法を示しています。

@Html.LabelFor(m => m.PropertyName,
"Label Text");
@Html.LabelForModel("Label Text");

子アクション出力キャッシュ

OutputCacheAttribute では、Html.RenderAction ヘルパー メソッドまたは Html.Action ヘルパー メソッドを使用して呼び出される子アクションの出力キャッシュがサポートされています。 次の例は、別のアクションを呼び出すビューを示しています。

Hi there. The uncached time is:
@DateTime.Now
The cached time is: @Html.Action("GetDate")

GetDate アクションには、OutputCacheAttribute で注釈が付きます。

[OutputCache(Duration = 100,
VaryByParam = "none")]
public string GetDate() {
    return DateTime.Now.ToString();
}

このコードを実行すると、Html.Action("GetDate") の呼び出しの結果が 100 秒間キャッシュされます。

[ビューの追加] ダイアログ ボックスの機能強化

厳密に型指定されたビューを追加すると、[ビューの追加] ダイアログ ボックスで、コア .NET Frameworkの種類など、以前のリリースよりも適用できない型がフィルター処理されるようになりました。 また、リストは完全修飾型名ではなくクラス名で並べ替えられるようになったため、型を簡単に見つけることができます。 たとえば、次の例のように型名が表示されます。

ClassName (名前空間)

以前のリリースでは、これは次のように表示されていました。

Namespace.ClassName

詳細な要求の検証

ValidateInputAttributeExclude プロパティが存在しなくなりました。 代わりに、モデル バインド中にモデルの特定のプロパティに対する要求検証をスキップするには、新しい SkipRequestValidationAttribute を使用します。

たとえば、アクション メソッドを使用してブログ投稿を編集するとします。

[HttpPost]
public ActionResult Edit(BlogPostViewModel post) {
    // Save the post in the database
}

次の例は、ブログ投稿のビュー モデルを示しています。

public class BlogPostViewModel {
    public int Id {get; set;}

    public string Subject {get; set;}

    public string Description {get; set;}
}

ユーザーが Description プロパティのマークアップを送信すると、要求の検証のためにモデル バインドが失敗します。 ブログ投稿 Description のモデル バインド中に要求の検証を無効にするには、次の例に示すように、 SkipRequpestValidationAttribute を プロパティに適用します。

public class BlogPostViewModel {
    public int Id {get; set;}

    public string Subject {get; set;}

    [SkipRequestValidation]

    public string Description {get; set;}
}

または、モデルのすべてのプロパティの要求検証をオフにするには、値が falseValidateInputAttribute をアクション メソッドに適用します。

[HttpPost]
[ValidateInput(false)]
public ActionResult Edit(BlogPostViewModel post) {
    // Save the post in the database
}

ASP.NET MVC 3 RC の破壊的変更

  • 例外フィルターの実行順序が、同じ Order 値を持つ例外フィルターに対して変更されました。 ASP.NET MVC 2 以前では、アクション メソッドと同じ Order を持つコントローラーの例外フィルターは、アクション メソッドの例外フィルターの前に実行されました。 これは通常、 指定された Order 値なしで例外フィルターが適用された場合です。 ASP.NET MVC 3 では、最も限定的な例外ハンドラーが最初に実行されるように、この順序が逆になりました。 以前のバージョンと同様に、 Order プロパティが明示的に指定されている場合、フィルターは指定した順序で実行されます。
  • FileExtensions という名前の新しいプロパティを VirtualPathProviderViewEngine 基本クラスに追加しました。 パス (名前ではなく) でビューを参照する場合、この新しいプロパティで指定されたリストに含まれるファイル拡張子を持つビューのみが考慮されます。 これは、カスタム ビルド プロバイダーを登録して Web フォーム ビューのカスタム ファイル拡張子を有効にし、名前ではなく完全なパスを使用してそれらのビューを参照するユーザーにとって重大な変更です。 回避策は、 FileExtensions プロパティの値を変更して、カスタム ファイル拡張子を含めます。

ASP.NET MVC 3 RC の既知の問題

  • インストーラーは Visual Studio 2010 のコンポーネントを更新するため、以前のバージョンの ASP.NET MVC の完了に時間がかかる場合があります。
  • [ビューの追加] スキャフォールディング (astrongly 型のビューのスキャフォールディング) を選択すると、書き込み専用プロパティがスキャフォールディングされます。 スキャフォールディングでは、これらは常に無視する必要があります。 [ビューの追加] ダイアログでは、"編集" ビューまたは "作成" ビューを生成するときに、読み取り専用プロパティもスキャフォールディングされます。 読み取り専用プロパティは、表示ビューとリスト ビューでのみスキャフォールディングする必要があります。
  • ASP.NET MVC 3 が Async CTP と共にインストールされている場合、デバッグは機能しません。 ASP.NET MVC 3 を非同期 CTP と並行してインストールすることはできません。 デバッグを修復するには、Async CTP をアンインストールします。 詳細については、MVC 3 RC のすべての部分のアンインストールに関するこの ブログ記事 ASP.NET 参照してください。
  • Resharper がインストールされている場合、Razor Intellisense は機能しません。 ReSharper がインストールされていて、ASP.NET MVC 3 RC の Razor Intellisense サポートを利用したい場合は、JetBrains の このブログ投稿 を読んで、それらを今日一緒に使用する方法について説明します。
  • ASP.NET MVC 3 のベータ版で作成された CSHTML ビューと VBHTML ビューには、発行を省略するビルド アクションが正しくありません。 これらのファイルの ビルド アクション は、"コンテンツ" に設定する必要があります。 ASP.NET MVC 3 RC では、新しいファイルのこの問題は修正されますが、ベータ版で作成されたプロジェクトの既存のファイルの設定は修正されません。
  • インストーラーは Visual Studio 2010 のコンポーネントを更新するため、以前のバージョンの ASP.NET MVC の完了に時間がかかる場合があります。
  • "編集" の厳密に型指定されたビュー スキャフォールディングを選択するときのビュースキャフォールディングの追加は、読み取り専用プロパティです。 同様に、書き込み専用プロパティは "表示" ビュー用にスキャフォールディングされます。
  • インストール中にライセンス条項への同意を確認するためのダイアログ ボックスで、意図したよりも小さいウィンドウにライセンス条項が表示されます。
  • Visual Studio Async CTP をインストールすると、ASP.NET MVC 3 ツールインストールの一部として含まれる Razor リリースと競合します。 Visual Studio Async CTP と Razor リリースの両方を同じコンピューターにインストールしないでください。
  • Razor ビュー (.cshtml ファイル) を編集している場合、Visual Studio の [コントローラーに移動] メニュー項目は使用できません。また、コード スニペットもありません。

ASP.NET MVC 3 ベータ版

ASP.NET MVC 3 ベータ版は、2010 年 10 月 6 日にリリースされました。 次のメモはベータ 版リリースに固有であり、上記の「ASP.NET MVC 3 リリース候補」セクションで参照されている更新プログラムまたは変更の対象となります。

MVC 3 ベータ版 ASP.NET 新機能

このセクションでは、ASP.NET MVC 3 ベータ 版リリースで導入された機能について説明します。

NuGet パッケージ マネージャー

ASP.NET MVC 3 には、Visual Studio プロジェクトにライブラリとツールを追加するための統合パッケージ管理ツールである NuGet パッケージ マネージャーが含まれています。 ほとんどの場合、開発者がライブラリをソース ツリーに取り込むための現在の手順が自動化されます。

コマンド ライン ツールとして、Visual Studio 2010 内の統合コンソール ウィンドウ、Visual Studio コンテキスト メニュー、PowerShell コマンドレットのセットとして NuGet を操作できます。

NuGet の詳細については、 NuGet のドキュメントを参照してください

[新しいプロジェクトの改善] ダイアログ ボックス

新しいプロジェクトを作成すると、[新しいプロジェクト] ダイアログ ボックスで、ビュー エンジンと ASP.NET MVC プロジェクトの種類を指定できるようになりました。

新しいプロジェクト ダイアログ ボックスのスクリーンショット。Razor はビュー エンジン メニューから選択されます。

ダイアログ ボックスに表示されるテンプレートとビュー エンジンの一覧を変更するためのサポートは、このリリースには含まれていません。

既定のテンプレートは次のとおりです。

空白。 ASP.NET MVC プロジェクトの既定のディレクトリ構造、既定の ASP.NET MVC スタイルを含む小さな Site.css ファイル、既定の JavaScript ファイルを含む Scripts ディレクトリなど、ASP.NET MVC プロジェクト用の最小限のファイル セットが含まれます。

インターネット アプリケーション。 ASP.NET MVC 内でメンバーシップ プロバイダーを使用する方法を示すサンプル機能が含まれています。

Razor ビューで厳密に型指定されたモデルを指定する簡単な方法

厳密に型指定された Razor ビューのモデルの種類を指定する方法は、CSHTML ビューの新しい @model ディレクティブと @ModelType VBHTML ビューの ディレクティブを使用して簡略化されました。 以前のバージョンの ASP.NET MVC では、Razor ビューに厳密に型指定されたモデルを次のように指定していました。

@inherits System.Web.Mvc.WebViewPage

このリリースでは、次の構文を使用できます。

@model MyModelNamespace.MyModelType

新しい ASP.NET Web ページ ヘルパー メソッドのサポート

新しい ASP.NET Web ページ テクノロジには、ビューとコントローラーに一般的に使用される機能を追加するのに役立つヘルパー メソッドのセットが含まれています。 ASP.NET MVC 3 では、コントローラーとビュー内でのこれらのヘルパー メソッドの使用がサポートされています (必要に応じて)。 これらのメソッドは System.Web.Helpers アセンブリに含まれています。 次の表に、ASP.NET Web ページ ヘルパー メソッドをいくつか示します。

ヘルパー 説明
グラフ ビュー内にグラフをレンダリングします。 Chart.ToWebImage、Chart.Save、Chart.Write などのメソッドが含まれます。
暗号 ハッシュ アルゴリズムを使用して、適切にソルト化およびハッシュされたパスワードを作成します。
Webgrid オブジェクトのコレクション (通常はデータベースからのデータ) をグリッドとしてレンダリングします。 ページングと並べ替えをサポートします。
WebImage イメージをレンダリングします。
ウェブメール 電子メールを送信します。

ヘルパーと基本的な構文を一覧表示するクイック リファレンス トピックは、ASP.NET Razor 構文に関するドキュメントの一部として、次の URL で入手できます。

https://www.asp.net/webmatrix/tutorials/asp-net-web-pages-api-reference

依存関係挿入の追加のサポート

ASP.NET MVC 3 Preview 1 リリースに基づいて、現在のリリースには、2 つの新しいサービスと 4 つの既存のサービスのサポートが追加され、依存関係解決と Common Service Locator のサポートが強化されています。

Fine-Grained コントローラーインスタンス化のための新しい IControllerActivator インターフェイス

新しい IControllerActivator インターフェイスを使用すると、依存関係の挿入を介してコントローラーをインスタンス化する方法をより細かく制御できます。 インターフェイスの例を次に示します。

namespace System.Web.Mvc {
    using System.Web.Routing;

    public interface IControllerActivator {
        IController Create(RequestContext requestContext, Type controllerType);
    }
}

コントローラー ファクトリの役割とは対照的です。 コントローラー ファクトリは IControllerFactory インターフェイスの実装であり、コントローラーの種類の検索とそのコントローラー型のインスタンスのインスタンス化の両方を担当します。

コントローラー アクティベーターは、コントローラーの種類のインスタンスをインスタンス化する必要があります。 コントローラーの種類の参照は実行されません。 適切なコントローラーの種類を見つけた後、コントローラー ファクトリは、コントローラーの実際のインスタンス化を処理するために、IControllerActivator のインスタンスに委任する必要があります。

DefaultControllerFactory クラスには、IControllerFactory インスタンスを受け入れる新しいコンストラクターがあります。 これにより、依存関係の挿入を適用して、コントローラーの作成のこの側面を管理できます。既定のコントローラーの種類の参照動作をオーバーライドする必要はありません。

IServiceLocator インターフェイスが IDependencyResolver に置き換えられました

コミュニティからのフィードバックに基づいて、ASP.NET MVC 3 ベータ リリースでは、IServiceLocator インターフェイスの使用が、ASP.NET MVC のニーズに固有のスリムダウン IDependencyResolver インターフェイスに置き換えられました。 次の例は、新しいインターフェイスを示しています。

namespace System.Web.Mvc {
    using System.Collections.Generic;

    public interface IDependencyResolver {
        object GetService(Type serviceType);
        IEnumerable<object> GetServices(Type serviceType);
    }
}

この変更の一環として、ServiceLocator クラスも DependencyResolver クラスに置き換えられました。 依存関係リゾルバーの登録は、以前のバージョンの ASP.NET MVC と似ています。

DependencyResolver.SetResolver(myResolver);

このインターフェイスの実装では、単に基になる依存関係挿入コンテナーに委任して、要求された型の登録済みサービスを提供する必要があります。

要求された型の登録済みサービスがない場合、ASP.NET MVC は、このインターフェイスの実装が GetService から null を返し、GetServices から空のコレクションを返す必要があります。

新しい DependencyResolver クラスを使用すると、新しい IDependencyResolver インターフェイスまたは Common Service Locator インターフェイス (IServiceLocator) を実装するクラスを登録できます。 Common Service Locator の詳細については、 GitHub の CommonServiceLocator に関するページを参照してください。

Fine-Grained ビュー ページインスタンス化のための新しい IViewActivator インターフェイス

新しい IViewPageActivator インターフェイスを使用すると、依存関係の挿入を使用してビュー ページをインスタンス化する方法をより細かく制御できます。 これは、WebFormView インスタンスと RazorView インスタンスの両方に適用されます。 次の例は、新しいインターフェイスを示しています。

namespace System.Web.Mvc {
    public interface IViewPageActivator {
        object Create(ControllerContext controllerContext, Type type);
    }
}

これらのクラスは IViewPageActivator コンストラクター引数を受け入れるようになりました。これにより、依存関係の挿入を使用して、ViewPage、ViewUserControl、および WebViewPage 型のインスタンス化方法を制御できます。

既存のサービスに対する新しい依存関係リゾルバーのサポート

新しいリリースには、次のサービスに対する依存関係解決のサポートが含まれています。

  • モデル検証プロバイダー。 ModelValidatorProvider を実装するクラスは依存関係リゾルバーに登録でき、システムはそれらを使用してクライアント側とサーバー側の検証をサポートします。
  • モデル メタデータ プロバイダー。 ModelMetadataProvider を実装する 1 つのクラスを依存関係リゾルバーに登録でき、システムはそれを使用してテンプレートシステムと検証システムのメタデータを提供します。
  • 値プロバイダー。 ValueProviderFactory を実装するクラスは依存関係リゾルバーに登録でき、システムはそれらを使用して、コントローラーとモデル バインド中に使用される値プロバイダーを作成します。
  • モデル バインダー。 IModelBinderProvider を実装するクラスは依存関係リゾルバーに登録でき、システムはそれらを使用して、モデル バインド システムによって使用されるモデル バインダーを作成します。

邪魔にならない jQuery ベースの Ajax の新しいサポート

ASP.NET MVC には、次のような Ajax ヘルパー メソッドが含まれています。

  • Ajax.ActionLink
  • Ajax.RouteLink
  • Ajax.BeginForm
  • Ajax.BeginRouteForm

これらのメソッドは、完全ポストバックを使用するのではなく、JavaScript を使用してサーバー上でアクション メソッドを呼び出します。 この機能は、jQuery を目立たない方法で利用するように更新されました。 これらのヘルパー メソッドは、インライン クライアント スクリプトを侵入的に出力するのではなく、 data-ajax プレフィックスを使用して HTML5 属性を出力することで、マークアップから動作を分離します。 その後、適切な JavaScript ファイルを参照することで、マークアップに動作が適用されます。 次の JavaScript ファイルが参照されていることを確認します。

  • jquery-1.4.1.js
  • jquery.unobtrusive.ajax.js

この機能は、ASP.NET MVC 3 の新しいプロジェクト テンプレートのWeb.config ファイルで既定で有効になっていますが、既存のプロジェクトでは既定で無効になっています。 詳細については、このドキュメント で後述する「クライアント検証用のアプリケーション全体のフラグと控えめな JavaScript の追加 」を参照してください。

邪魔にならない jQuery 検証の新しいサポート

既定では、ASP.NET MVC 3 Beta では、クライアント側の検証を実行するために、控えめな方法で jQuery 検証が使用されます。 目立たないクライアント検証を有効にするには、ビュー内から次のような呼び出しを行います。

Html.EnableClientValidation();

これには、ViewContext.UnobtrusiveJavaScriptEnabled プロパティが true に設定されている必要があります。これは、次の呼び出しを行うことで実行できます。

Html.EnableUnobtrusiveJavaScript();

また、次の JavaScript ファイルが参照されていることを確認します。

  • jquery-1.4.1.js
  • jquery.validate.js
  • jquery.validate.unobtrusive.js

この機能は、ASP.NET MVC 3 の新しいプロジェクト テンプレートのWeb.config ファイルで既定で有効になっていますが、既存のプロジェクトでは既定で無効になっています。 詳細については、このドキュメントで後述する 「クライアント検証用の新しいアプリケーション全体のフラグ」と「目立たない JavaScript 」を参照してください。

クライアント検証と妨げのない JavaScript 用の新しいApplication-Wide フラグ

次の例のように、HtmlHelper クラスの静的メンバーを使用して、クライアントの検証と妨げのない JavaScript をグローバルに有効または無効にすることができます。

HtmlHelper.ClientValidationEnabled = true;
HtmlHelper.UnobtrusiveJavaScriptEnabled = true;

既定のプロジェクト テンプレートでは、既定で目立たない JavaScript が有効になります。 次の設定を使用して、アプリケーションのルート Web.config ファイルでこれらの機能を有効または無効にすることもできます。

<configuration>
        <appSettings>
            <add key="ClientValidationEnabled" value="true"/>
            <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
        </appSettings>
    </configuration>

これらの機能は既定で有効にできるため、次の例に示すように、既定の設定をオーバーライドできる新しいオーバーロードが HtmlHelper クラスに導入されました。

public void EnableClientValidation();
public void EnableClientValidation(bool enabled);
public void EnableUnobtrusiveJavaScript();
public void EnableUnobtrusiveJavaScript(bool enabled);

下位互換性のために、これらの機能の両方が既定で無効になっています。

ビューの実行前に実行されるコードの新しいサポート

これで、_viewstart.cshtml (または _viewstart.vbhtml) という名前のファイルを Views ディレクトリに配置し、そのディレクトリとそのサブディレクトリ内の複数のビュー間で共有されるコードを追加できるようになりました。 たとえば、~/Views フォルダーの _viewstart.cshtml ページに次のコードを配置できます。

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

これにより、Views フォルダーとそのすべてのサブフォルダー内のすべてのビューのレイアウト ページが再帰的に設定されます。 ビューがレンダリングされるときに、ビュー コードが実行される前に、_viewstart.cshtml ファイル内のコードが実行されます。 _viewstart.cshtml コードは、そのフォルダー内のすべてのビューに適用されます。

既定では、_viewstart.cshtml ファイル内のコードは、任意のサブフォルダー内のビューにも適用されます。 ただし、個々のサブフォルダーには、独自のバージョンの _viewstart.cshtml ファイルを含めることができます。その場合は、ローカル バージョンが優先されます。 たとえば、HomeController のすべてのビューに共通するコードを実行するには、~/Views/Home フォルダーに _viewstart.cshtml ファイルを配置します。

VBHTML Razor 構文の新しいサポート

前の ASP.NET MVC プレビューには、C# に基づく Razor 構文を使用したビューのサポートが含まれていました。 これらのビューでは、.cshtml ファイル拡張子が使用されます。 Razor をサポートするための継続的な作業の一環として、ASP.NET MVC 3 Beta では、.vbhtml ファイル拡張子を使用する Visual Basic の Razor 構文のサポートが導入されています。

VBHTML ページで Visual Basic 構文を使用する方法の概要については、次の URL のチュートリアルを参照してください。

https://www.asp.net/webmatrix/tutorials/asp-net-web-pages-visual-basic

ValidateInputAttribute に対するより詳細な制御

ASP.NET MVC には、常に ValidateInputAttribute クラスが含まれています。これにより、コア ASP.NET 要求検証インフラストラクチャが呼び出され、受信要求に悪意のある入力が含まれていないことを確認します。 既定では、入力検証は有効になっています。 次の例のように、ValidateInputAttribute 属性を使用して要求の検証を無効にすることができます。

[ValidateInput(false)]
public ActionResult SomeAction() {
    return View();
}

ただし、多くの Web アプリケーションには HTML を許可する必要がある個々のフォーム フィールドがありますが、残りのフィールドは許可しないでください。 ValidateInputAttribute クラスを使用すると、要求の検証に含めてはならないフィールドの一覧を指定できるようになりました。

たとえば、ブログ エンジンを開発している場合は、[本文] フィールドと [概要] フィールドでマークアップを許可できます。 これらのフィールドは 2 つの入力要素で表される場合があり、それぞれにプロパティ名 ("Body" と "Summary" ) に対応する name 属性が含まれます。 これらのフィールドの要求検証のみを無効にするには、次の例のように、ValidateInput クラスの Exclude プロパティで名前 (コンマ区切り) を指定します。

[ValidateInput(true, Exclude="Body, Summary")]
public ActionResult About() {
    return View();
}

ヘルパーは、匿名オブジェクトを使用して指定された HTML 属性名のアンダースコアをハイフンに変換します

ヘルパー メソッドを使用すると、次の例のように、匿名オブジェクトを使用して属性の名前と値のペアを指定できます。

Html.TextBox("Name", "Value", new {title = "Title"})

この方法では、属性名にハイフンを使用することはできません。これは、ASP.NET のプロパティ名にハイフンを使用できないためです。 ただし、カスタム HTML5 属性ではハイフンが重要です。たとえば、HTML5 では "data-" プレフィックスが使用されます。

同時に、HTML の属性名にはアンダースコアを使用できませんが、プロパティ名内で有効です。 したがって、匿名オブジェクトを使用して属性を指定し、属性名にアンダースコアが含まれている場合、ヘルパー メソッドはアンダースコアをハイフンに変換します。 たとえば、次のヘルパー構文ではアンダースコアが使用されます。

Html.TextBox("Name", "Value", new {data_required = "true"})

前の例では、ヘルパーの実行時に次のマークアップをレンダリングします。

<input data-required="true" id="Name" name="Name"
       type="textbox" value="Value" />

バグの修正

EditorFor および DisplayFor テンプレート ヘルパーの既定のオブジェクト テンプレートで、DisplayAttribute.Order プロパティで指定された順序がサポートされるようになりました。 (以前のバージョンでは、[注文] 設定は使用されませんでした)。

クライアント検証で、検証属性が適用されたオーバーライドされたプロパティの検証がサポートされるようになりました。

JsonValueProviderFactory が既定で登録されるようになりました。

重大な変更

同じ Order 値を持つ例外フィルターの例外フィルターの実行順序が変更されました。 ASP.NET MVC 2 以前では、アクション メソッドと同じ Order を持つコントローラーの例外フィルターが、アクション メソッドの例外フィルターの前に実行されました。 これは通常、指定された Order 値なしで例外フィルターが適用された場合です。 ASP.NET MVC 3 では、最も限定的な例外ハンドラーが最初に実行されるように、この順序が逆になりました。 以前のバージョンと同様に、Order プロパティが明示的に指定されている場合、フィルターは指定した順序で実行されます。

既知の問題

インストール中にライセンス条項への同意を確認するためのダイアログ ボックスで、意図したよりも小さいウィンドウにライセンス条項が表示されます。

Razor ビューには、IntelliSense のサポートも構文の強調表示もありません。 Visual Studio での Razor 構文のサポートは、後のリリースの一部として含まれる予定です。

Razor ビュー (CSHTML ファイル) を編集している場合、Visual Studio の [コントローラーに移動] メニュー項目は使用できなくなり、コード スニペットはありません。

構文を @model 使用して厳密に型指定された CSHTML ビューを指定する場合、型の言語固有のショートカットは認識されません。 たとえば、 @model int は機能しませんが @model 、Int32 は機能します。 このバグの回避策は、モデルの種類を指定するときに実際の型名を使用することです。

構文を @model 使用して厳密に型指定された CSHTML ビューを指定する (または @ModelType 厳密に型指定された VBHTML ビューを指定する) 場合、null 許容型と配列宣言はサポートされません。 たとえば、 @model int? はサポートされていません。 代わりに @model Nullable<Int32> を使用してください。 構文 @model string[] もサポートされていません。代わりに を使用してください @model IList<string>

ASP.NET MVC 2 プロジェクトを MVC 3 ASP.NET にアップグレードする場合は、Web.config ファイルの appSettings セクションに次の内容を追加してください。

<appSettings>
  <add key="enableSimpleMembership" value="false" />
</appSettings>

Web.configで使用されているフォーム認証設定を無視して、フォーム認証によって認証されていないユーザーが ~/Account/Login に常にリダイレクトされる既知の問題があります。回避策は、次のアプリ設定を追加することです。

<add key="autoFormsAuthentication" value="false" />

免責情報

© 2011 Microsoft Corporation. All rights reserved. このドキュメントは "現状のまま" 提供されます。このドキュメントに記載されている情報および見解 (URL および他のインターネット Web サイトの参照を含む) は、予告なしに変更されることがあります。 お客様は、その使用に関するリスクを負うものとします。

このドキュメントは、Microsoft 製品の知的財産権に関する法的な権利をお客様に許諾するものではありません。 内部的な参照目的に限り、このドキュメントを複製して使用することができます。