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 の新機能
- Phil Haack: ASP.NET MVC 3 リリース
- Scott Hanselman: ASP.NET MVC3、WebMatrix、NuGet、IIS Express、Orchard リリース - コンテキストでの Microsoft 1 月 Web リリース
- Scott Guthrie: ASP.NET MVC 3、IIS Express、SQL CE 4、Web ファーム フレームワーク、オーチャード、WebMatrix のリリースを発表
- ASP.NET MVC 3 のリリース ノート
インストールとヘルプ
- Web プラットフォーム インストーラー ASP.NET 使用して MVC 3 をインストールする (推奨)
- インストーラー実行可能ファイル ASP.NET 使用して MVC 3 をインストールする
- Visual Studio 11 Developer Preview 用の MVC 3 ASP.NET インストールする
- ASP.NET MVC 3 の概要に関するチュートリアルを読む
- フォーラムで MVC 3 ASP.NET ヘルプとディスカッションを行 う
ASP.NET MVC 3 Overview (ASP.NET MVC 3 の概要)
ASP.NET MVC 3 は、ASP.NET MVC 1 と 2 に基づいて構築されており、コードを簡略化し、より深い拡張性を実現する優れた機能が追加されています。 このトピックでは、このリリースに含まれる多くの新機能の概要を次のセクションにまとめます。
- MvcScaffold 統合による拡張可能なスキャフォールディング
- HTML 5 対応プロジェクト テンプレート
- Razor ビュー エンジン
- 複数のビュー エンジンのサポート
- コントローラーの機能強化
- JavaScript と Ajax
- モデル検証の機能強化
- 依存関係の挿入の機能強化
- その他の新機能
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 のスキャフォールディングの詳細については、次のリソースを参照してください。
Steve Sanderson の投稿シリーズは次のとおりです。
Scott Hanselman 氏の PDC 2010 セッションからの投稿「Web 愛の名前のないパッケージ」でブログを構築する
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 の詳細については、次のリソースを参照してください。
- Razor を紹介する Scott Guthrie のブログ投稿
- Scott Guthrie's blog post introducing the @model keyword
- Razor レイアウトを紹介する Scott Guthrie のブログ投稿
- Razor API クイック リファレンス
- MVC 3 リリース ノート
複数のビュー エンジンのサポート
ASP.NET MVC 3 の [ ビューの追加 ] ダイアログ ボックスを使用すると、操作するビュー エンジンを選択できます。[ 新しいプロジェクト ] ダイアログ ボックスでは、プロジェクトの既定のビュー エンジンを指定できます。 Web Forms ビュー エンジン (ASPX)、Razor、または Spark、NHaml、NDjango などのオープンソース ビュー エンジンを選択できます。
コントローラーの機能強化
グローバル アクション フィルター
アクション メソッドの実行前またはアクション メソッドの実行後にロジックを実行したい場合があります。 これをサポートするために、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
インスタンスをtrue
Permanent
返します。 - HttpStatusCodeResult。 ユーザー指定の HTTP 状態コードを返します。
JavaScript と Ajax の機能強化
既定では、MVC 3 の Ajax および検証ヘルパーでは、目立たない JavaScript アプローチが使用されます。 目立たない JavaScript を使用すると、インライン JavaScript を HTML に挿入することを回避できます。 これにより、HTML が小さくなり、煩雑になり、JavaScript ライブラリのスワップやカスタマイズが容易になります。 MVC 3 の検証ヘルパーでは、既定で プラグインも使用 jQueryValidate
されます。 MVC 2 の動作が必要な場合は、 web.config ファイル設定を使用して、目立たない JavaScript を無効にすることができます。 JavaScript と Ajax の機能強化の詳細については、次のリソースを参照してください。
- Wikipedia サイトの目立たない JavaScript の基本的な概要
- ブラッド・ウィルソンの控えめなJavaScript投稿
- Brad Wilson の控えめな JavaScript 検証投稿
- Razor と目立たない JavaScript を使用した MVC 3 アプリケーションの作成 (ASP.NET サイトのチュートリアル)
- MVC 3 リリース ノート
既定で有効になっている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 属性をモデルまたはビュー モデルに追加して、プロパティごとに要求の検証を無効にできるようになりました。 要求の検証の詳細については、次のリソースを参照してください。
- MVC 3 リリース候補に関する Scott Guthrie のブログ投稿の「控えめな JavaScript と検証」セクション。
- MVC 3 リリース ノート
拡張可能な [新しいプロジェクト] ダイアログ ボックス
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 を削除する新しいイントラネット プロジェクト テンプレートが含まれています。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示