ASP.NET MVC 3

(2011 年 4 月のツール更新プログラムを含む)

ASP.NET MVC 3 は、十分に確立された設計パターンと、ASP.NET と.NET Frameworkの機能を使用して、スケーラブルな標準ベースの Web アプリケーションを構築するためのフレームワークです。

ASP.NET MVC 2 と並行してインストールされるため、今すぐ使用を開始してください。

インストーラーのダウンロード はこちら

上位の機能

  • NuGet を介して拡張可能な統合スキャフォールディング システム
  • HTML 5 対応プロジェクト テンプレート
  • 新しい Razor ビュー エンジンを含む表現型ビュー
  • 依存関係の挿入とグローバル アクション フィルターを使用した強力なフック
  • 妨げのない JavaScript、jQuery 検証、JSON バインドを使用した豊富な JavaScript サポート
  • 以下の機能の完全な一覧を読む

ASP.NET MVC 3 の新機能

インストールとヘルプ

ASP.NET MVC 3 Overview (ASP.NET MVC 3 の概要)

ASP.NET MVC 3 は、ASP.NET MVC 1 と 2 に基づいて構築されており、コードを簡略化し、より深い拡張性を実現する優れた機能が追加されています。 このトピックでは、このリリースに含まれる多くの新機能の概要を次のセクションにまとめます。

MvcScaffold 統合による拡張可能なスキャフォールディング

新しいスキャフォールディング システムを使用すると、フレームワークを初めて使用する場合に生産性の高い使用を簡単に開始できます。また、経験があり、既に何をしているかを把握している場合は、一般的な開発タスクを自動化できます。

これは、MvcScaffolding という新しい NuGet スキャフォールディング パッケージでサポートされています。 "スキャフォールディング" という用語は、多くのソフトウェア テクノロジによって使用され、"ソフトウェアの基本的な概要をすばやく生成し、編集してカスタマイズできる" ことを意味します。 ASP.NET MVC 用に作成するスキャフォールディング パッケージは、いくつかのシナリオで大いに役立ちます。

  • MVC ASP.NET 初めて学習する場合は、便利で動作するコードを簡単に取得できるため、ニーズに応じて編集および調整できます。 それは空白のページを見て、どこから始めればよいか分からないというトラウマからあなたを救います!
  • MVC ASP.NET よく知っていて、オブジェクト リレーショナル マッパー、ビュー エンジン、テスト ライブラリなど、いくつかの新しいアドオン テクノロジを検討している場合は、そのテクノロジの作成者もスキャフォールディング パッケージを作成している可能性があるためです。
  • テスト フィクスチャ、配置スクリプト、その他必要なものを出力するカスタム スキャフォールディングを作成できるため、作業に何らかの種類の同様のクラスまたはファイルを繰り返し作成する必要がある場合。 チームの全員がカスタム スキャフォールディングを使用することもできます。

MvcScaffolding のその他の機能は次のとおりです。

  • C# および VB プロジェクトのサポート
  • Razor および ASPX ビュー エンジンのサポート
  • ASP.NET MVC 領域へのスキャフォールディングとカスタム ビュー レイアウト/マスターの使用をサポート
  • T4 テンプレートを編集することで、出力を簡単にカスタマイズできます
  • カスタム PowerShell ロジックとカスタム T4 テンプレートを使用して、まったく新しいスキャフォールディングを追加できます。 これらのパラメーター (および指定したカスタム パラメーター) は、コンソールのタブ補完リストに自動的に表示されます。
  • さまざまなテクノロジ用の追加のスキャフォールディングを含む NuGet パッケージを取得し (たとえば、LINQ to SQLの概念実証があります)、それらを組み合わせて組み合わせることができます

ASP.NET MVC 3 Tools Update には、次のようなこのスキャフォールディング システムに対する優れた Visual Studio サポートが含まれています。

  • コントローラーの追加ダイアログで、コントローラーの作成、読み取り、更新、および削除のアクションと対応するビューの完全な自動スキャフォールディングがサポートされるようになりました。 既定では、EF Code First を使用してデータ アクセス コードをスキャフォールディングします。
  • [コントローラーの追加] ダイアログでは、MvcScaffolding などの NuGet パッケージを使用した拡張可能なスキャフォールディングがサポートされています。 これにより、カスタム スキャフォールディングをダイアログに接続できます。これにより、NHibernate や ODBCDirect を使用した JET など、他のデータ アクセス テクノロジ用のスキャフォールディングを作成できます。

ASP.NET MVC 3 のスキャフォールディングの詳細については、次のリソースを参照してください。

HTML 5 プロジェクト テンプレート

[新しいプロジェクト] ダイアログには、HTML 5 バージョンのプロジェクト テンプレートを有効にするチェック ボックスが表示されます。 これらのテンプレートは Modernizr 1.7 を利用して、下位レベルのブラウザーで HTML 5 と CSS 3 の互換性サポートを提供します。

Razor ビュー エンジン

ASP.NET MVC 3 には、次の利点を提供する Razor という名前の新しいビュー エンジンが付属しています。

  • Razor 構文はクリーンで簡潔であり、最小限のキーストロークが必要です。
  • Razor は、C# や Visual Basic などの既存の言語に基づいているため、学習が容易です。
  • Visual Studio には、Razor 構文の IntelliSense とコードの色付けが含まれています。
  • Razor ビューは、アプリケーションの実行や Web サーバーの起動を必要とせずに単体テストできます。

一部の新しい Razor 機能には、次のものが含まれます。

  • @model ビューに渡される型を指定するための構文。
  • @* *@ コメント構文。
  • サイト全体に対して既定値 (など layoutpage) を 1 回指定する機能。
  • Html.Raw HTML エンコードなしでテキストを表示するためのメソッド。
  • 複数のビュー (_viewstart.cshtml または _viewstart.vbhtml ファイル) 間でコードを共有するためのサポート。

Razor には、次のような新しい HTML ヘルパーも含まれています。

  • Chart. グラフをレンダリングし、ASP.NET 4 のグラフ コントロールと同じ機能を提供します。
  • WebGrid. ページングと並べ替え機能を備えたデータ グリッドをレンダリングします。
  • Crypto. ハッシュ アルゴリズムを使用して、適切にソルト化およびハッシュされたパスワードを作成します。
  • WebImage. イメージをレンダリングします。
  • WebMail. 電子メールを送信します。

Razor の詳細については、次のリソースを参照してください。

複数のビュー エンジンのサポート

ASP.NET MVC 3 の [ ビューの追加 ] ダイアログ ボックスを使用すると、操作するビュー エンジンを選択できます。[ 新しいプロジェクト ] ダイアログ ボックスでは、プロジェクトの既定のビュー エンジンを指定できます。 Web Forms ビュー エンジン (ASPX)、Razor、または SparkNHamlNDjango などのオープンソース ビュー エンジンを選択できます。

コントローラーの機能強化

グローバル アクション フィルター

アクション メソッドの実行前またはアクション メソッドの実行後にロジックを実行したい場合があります。 これをサポートするために、MVC 2 で提供されたアクション フィルター ASP.NET。 アクション フィルターは、アクション前の動作とアクション後の動作を特定のコントローラー アクション メソッドに追加する宣言的な手段を提供するカスタム属性です。 ただし、場合によっては、すべてのアクション メソッドに適用される事前アクションまたはアクション後の動作を指定する必要がある場合があります。 MVC 3 では、グローバル フィルターをコレクションに GlobalFilters 追加して指定できます。 グローバル アクション フィルターの詳細については、次のリソースを参照してください。

新しい "ViewBag" プロパティ

MVC 2 コントローラーでは、 ViewData 遅延バインディングディクショナリ API を使用してビュー テンプレートにデータを渡すプロパティがサポートされています。 MVC 3 では、 プロパティでやや単純な構文を ViewBag 使用して、同じ目的を達成することもできます。 たとえば、 を記述 ViewData["Message"]="text"する代わりに、 を記述 ViewBag.Message="text"できます。 プロパティを使用 ViewBag するために、厳密に型指定されたクラスを定義する必要はありません。 動的プロパティであるため、代わりにプロパティを取得または設定するだけで、実行時に動的に解決されます。 内部的には、 ViewBag プロパティは名前と値のペアとしてディクショナリに ViewData 格納されます。 (注: MVC 3 のほとんどのプレリリース バージョンでは、 プロパティの ViewBag 名前は プロパティ ViewModel でした)。

新しい "ActionResult" 型

MVC 3 では、次 ActionResult の型と対応するヘルパー メソッドが新規または拡張されています。

  • HttpNotFoundResult。 クライアントに 404 HTTP 状態コードを返します。
  • RedirectResult。 ブール値パラメーターに応じて、一時的なリダイレクト (HTTP 302 状態コード) または永続的なリダイレクト (HTTP 301 状態コード) を返します。 この変更と組み合わせて、 Controller クラスには、永続的なリダイレクト RedirectPermanentを実行するための 3 つのメソッド (、 RedirectToRoutePermanent、、 RedirectToActionPermanent) が含まれるようになりました。 これらのメソッドは、 プロパティを に設定して のRedirectResultインスタンスをtruePermanent返します。
  • HttpStatusCodeResult。 ユーザー指定の HTTP 状態コードを返します。

JavaScript と Ajax の機能強化

既定では、MVC 3 の Ajax および検証ヘルパーでは、目立たない JavaScript アプローチが使用されます。 目立たない JavaScript を使用すると、インライン JavaScript を HTML に挿入することを回避できます。 これにより、HTML が小さくなり、煩雑になり、JavaScript ライブラリのスワップやカスタマイズが容易になります。 MVC 3 の検証ヘルパーでは、既定で プラグインも使用 jQueryValidate されます。 MVC 2 の動作が必要な場合は、 web.config ファイル設定を使用して、目立たない JavaScript を無効にすることができます。 JavaScript と Ajax の機能強化の詳細については、次のリソースを参照してください。

既定で有効になっているClient-Side検証

以前のバージョンの MVC では、クライアント側の検証を有効にするために、ビューから メソッドを明示的に呼び出す Html.EnableClientValidation 必要があります。 MVC 3 では、クライアント側の検証が既定で有効になっているため、これは不要になりました。 (これを無効にするには、 web.config ファイルの 設定を使用します)。

クライアント側の検証を機能させるには、サイト内の適切な jQuery および jQuery 検証ライブラリを参照する必要があります。 これらのライブラリは、自分のサーバーでホストすることも、Microsoft や Google の CDN などのコンテンツ配信ネットワーク (CDN) から参照することもできます。

リモート検証コントロール

ASP.NET MVC 3 では、jQuery 検証プラグインのリモート検証機能のサポートを利用できる新しい RemoteAttribute クラスがサポートされています。 これにより、クライアント側の検証ライブラリは、サーバー側でのみ実行できる検証ロジックを実行するために、サーバーで定義したカスタム メソッドを自動的に呼び出すことができます。

次の例では、 属性は Remote 、フィールドを検証するために、 クラスで という名前 UserNameAvailable のアクションを UsersController クライアント検証 UserName が呼び出すように指定しています。

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"; 
    } 
}

属性の Remote 使用方法の詳細については、MSDN ライブラリの「 方法: ASP.NET MVC でリモート検証を実装 する」を参照してください。

JSON バインディングのサポート

ASP.NET MVC 3 には、アクション メソッドが JSON でエンコードされたデータを受け取り、それを action-method パラメーターにモデルバインドできるようにする組み込みの JSON バインドサポートが含まれています。 この機能は、クライアント テンプレートとデータ バインディングを含むシナリオで役立ちます。 (クライアント テンプレートを使用すると、クライアントで実行されるテンプレートを使用して、1 つのデータ項目またはデータ項目のセットを書式設定および表示できます)。MVC 3 を使用すると、JSON データを送受信するサーバー上のアクション メソッドを使用して、クライアント テンプレートを簡単に接続できます。 JSON バインディングのサポートの詳細については、Scott Guthrie の MVC 3 Preview ブログ投稿JavaScript と AJAX の機能強化に関するセクションを参照してください。

モデル検証の機能強化

"DataAnnotations" メタデータ属性

ASP.NET MVC 3 では、 などのDisplayAttributeメタデータ属性がサポートされていますDataAnnotations

"ValidationAttribute" クラス

.NET Framework 4 では、 クラスがValidationAttribute改善され、検証対象のオブジェクトなど、現在の検証コンテキストに関する詳細情報を提供する新しいIsValidオーバーロードがサポートされました。 これにより、モデルの別のプロパティに基づいて現在の値を検証できる、より豊富なシナリオが可能になります。 たとえば、新しい CompareAttribute 属性を使用すると、モデルの 2 つのプロパティの値を比較できます。 次の例では、 プロパティが ComparePassword 有効にするために フィールドと Password 一致している必要があります。

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

検証インターフェイス

IValidatableObject インターフェイスを使用すると、モデル レベルの検証を実行でき、モデル全体の状態に固有の、またはモデル内の 2 つのプロパティ間で検証エラー メッセージを提供できます。 MVC 3 は、モデル バインド時にインターフェイスからエラーを IValidatableObject 取得し、組み込みの HTML フォーム ヘルパーを使用して、ビュー内の影響を受けるフィールドに自動的にフラグを設定または強調表示するようになりました。

IClientValidatable インターフェイスを使用すると、検証コントロールがクライアント検証をサポートしているかどうかを実行時に検出 ASP.NET MVC が可能になります。 このインターフェイスは、さまざまな検証フレームワークと統合できるように設計されています。

検証インターフェイスの詳細については、Scott Guthrie の MVC 3 Preview ブログ投稿モデル検証の改善に関するセクションを参照してください。 (ただし、ブログの "IValidateObject" への参照は "IValidatableObject" である必要があることに注意してください)。

依存関係の挿入の機能強化

ASP.NET MVC 3 では、依存関係挿入 (DI) の適用と、依存関係の挿入または制御反転 (IOC) コンテナーとの統合のサポートが向上しています。 DI のサポートは、次の領域に追加されています。

  • コントローラー (コントローラー ファクトリの登録と挿入、コントローラーの挿入)。
  • ビュー (ビュー エンジンの登録と挿入、ビュー ページへの依存関係の挿入)。
  • アクション フィルター (フィルターの検索と挿入)。
  • モデル バインダー (登録と挿入)。
  • モデル検証プロバイダー (登録と挿入)。
  • モデル メタデータ プロバイダー (登録と挿入)。
  • 値プロバイダー (登録と挿入)。

MVC 3 では、 Common Service Locator ライブラリと、そのライブラリの IServiceLocator インターフェイスをサポートする DI コンテナーがサポートされています。 また、DI フレームワークの統合を容易にする新しい IDependencyResolver インターフェイスもサポートされています。

MVC 3 の DI の詳細については、次のリソースを参照してください。

その他の新機能

NuGet 統合

ASP.NET MVC 3 では、セットアップの一環として NuGet が自動的にインストールされ、有効になります。 NuGet は、プロジェクトで .NET ライブラリとツールを簡単に見つけてインストールし、使用できるようにする無料のオープンソース パッケージ マネージャーです。 これは、すべての Visual Studio プロジェクトの種類 (ASP.NET Web Forms と ASP.NET MVC を含む) で動作します。

NuGet を使用すると、オープンソース プロジェクト (Moq、NHibernate、Ninject、StructureMap、NUnit、Windsor、RhinoMocks、Elmah などのプロジェクト) を管理する開発者は、ライブラリをパッケージ化し、オンライン ギャラリーに登録できます。 その後、これらのライブラリのいずれかを使用してパッケージを検索し、作業中のプロジェクトにインストールする .NET 開発者は簡単です。

ASP.NET 3 Tools Update では、プロジェクト テンプレートに JavaScript ライブラリがプレインストールされた NuGet パッケージが含まれているため、NuGet を介して更新できます。 Entity Framework Code First は、NuGet パッケージとしてもプレインストールされています。

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

Partial-Page出力キャッシュ

ASP.NET MVC では、バージョン 1 以降のフル ページ応答の出力キャッシュがサポートされています。 MVC 3 では、部分ページ出力キャッシュもサポートされています。これにより、応答のリージョンまたはフラグメントを簡単にキャッシュできます。 キャッシュの詳細については、MVC 3 リリース候補に関する Scott Guthrie のブログ投稿「部分ページ出力キャッシュ」セクションと、MVC 3 リリース ノート「子アクション出力キャッシュ」セクションを参照してください。

要求の検証をきめ細かく制御する

ASP.NET MVC には、XSS および HTML インジェクション攻撃から自動的に保護するのに役立つ要求検証が組み込まれています。 ただし、ユーザーが HTML コンテンツ (ブログ エントリや CMS コンテンツなど) を投稿できるようにする場合など、要求の検証を明示的に無効にしたい場合があります。 モデルのバインド中に 、AllowHtml 属性をモデルまたはビュー モデルに追加して、プロパティごとに要求の検証を無効にできるようになりました。 要求の検証の詳細については、次のリソースを参照してください。

拡張可能な [新しいプロジェクト] ダイアログ ボックス

ASP.NET MVC 3 では、プロジェクト テンプレート、ビュー エンジン、単体テスト プロジェクト フレームワークを [ 新しいプロジェクト ] ダイアログ ボックスに追加できます。

テンプレートスキャフォールディングの機能強化

MVC 3 スキャフォールディング テンプレート ASP.NET、モデルの主キー プロパティを識別し、以前のバージョンの MVC よりも適切に処理する方が適切です。 (たとえば、スキャフォールディング テンプレートでは、主キーが編集可能なフォーム フィールドとしてスキャフォールディングされていないことを確認します)。

既定では、スキャフォールディングの作成と編集でヘルパーではなく ヘルパーがHtml.TextBoxFor使用Html.EditorForされるようになりました。 これにより、[ ビューの追加 ] ダイアログ ボックスでビューが生成されるときに、データ注釈属性の形式でモデルのメタデータのサポートが向上します。

"Html.LabelFor" および "Html.LabelForModel" の新しいオーバーロード

ヘルパー メソッドと LabelForModel ヘルパー メソッドに新しいメソッド オーバーロードがLabelFor追加されました。 新しいオーバーロードを使用すると、ラベル テキストを指定またはオーバーライドできます。

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

ASP.NET MVC 3 では、コントローラー クラスでセッション状態を使用するかどうかと、セッション状態を読み取り/書き込み専用にするか、読み取り専用にするかを指定できます。 セッションレス コントローラーのサポートの詳細については、「 MVC 3 リリース ノート」を参照してください。

新しい "AdditionalMetadataAttribute" クラス

AdditionalMetadata 属性を使用して、モデル プロパティのModelMetadata.AdditionalValuesディクショナリを設定できます。 たとえば、ビュー モデルに管理者にのみ表示するプロパティがある場合は、次の例に示すように、そのプロパティに注釈を付けることができます。

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

このメタデータは、製品ビュー モデルがレンダリングされるときに、任意の表示またはエディター テンプレートで使用できるようになります。 メタデータ情報の解釈はユーザーが行う必要があります。

AccountController の機能強化

インターネット プロジェクト テンプレートの AccountController が大幅に改善されました。

新しいイントラネット プロジェクト テンプレート

Windows 認証を有効にし、AccountController を削除する新しいイントラネット プロジェクト テンプレートが含まれています。