トレーニング
ラーニング パス
FastTrack サービス、データ管理などを使用して、財務と運用アプリの実装を成功させるためのプロジェクト方法論を計画および設計します。
このブラウザーはサポートされなくなりました。
Microsoft Edge にアップグレードすると、最新の機能、セキュリティ更新プログラム、およびテクニカル サポートを利用できます。
(2011 年 4 月 Tools Update を含む)
ASP.NET MVC 3 は、確立された設計パターンと、ASP.NET と .NET Framework の機能を使用して、スケーラブルな標準ベースの Web アプリケーションを構築するためのフレームワークです。
これは ASP.NET MVC 2 と並列インストールされるので、今すぐ使い始めてください!
インストーラーはこちらからダウンロードしてください
ASP.NET MVC 3 の新機能
インストールとヘルプ
ASP.NET MVC 3 は ASP.NET MVC 1 および 2 を基盤として構築されており、コードの簡略化と、より深い拡張性の実現の両方を可能にする優れた機能が追加されています。 このトピックでは、このリリースに含まれる多くの新機能の概要を次のセクションにまとめて説明します。
新しいスキャフォールディング システムを使用すると、フレームワークをまったく初めて使用する場合は、フレームワークを生産的に選択して使用を開始することがより簡単になり、経験豊富で何をしているかが既にわかっている場合は、一般的な開発タスクを自動化できます。
これは、MvcScaffolding と呼ばれる新しい NuGet スキャフォールディング パッケージでサポートされています。 "スキャフォールディング" という用語は、多くのソフトウェア テクノロジで、"編集してカスタマイズできるソフトウェアの基本的なアウトラインをすばやく生成する" ことを意味するために使用されています。 ASP.NET MVC 用として作成するスキャフォールディング パッケージは、いくつかのシナリオで大いに役立ちます。
MvcScaffolding のその他の機能は次のとおりです。
ASP.NET MVC 3 Tools Update には、次のような、このスキャフォールディング システムに対する優れた Visual Studio サポートが含まれています。
ASP.NET MVC 3 でのスキャフォールディングの詳細については、次のリソースを参照してください。
次を含む Steve Sanderson の投稿シリーズ:
Scott Hanselman の PDC 2010 セッション からの投稿「Microsoft とのブログの構築 "Web 愛の無名パッケージ"」
[新しいプロジェクト] ダイアログには、HTML 5 バージョンのプロジェクト テンプレートを有効にするチェックボックスが含まれています。 これらのテンプレートでは、Modernizr 1.7 を活用して、下位レベルのブラウザーで HTML 5 と CSS 3 の互換性サポートを提供します。
ASP.NET MVC 3 には、次の利点を備えた Razor という名前の新しいビュー エンジンが付属しています。
一部の新しい Razor 機能には、次のものが含まれます。
@model
構文。@* *@
コメント構文。layoutpage
など) を 1 回指定する機能。Html.Raw
メソッド。Razor には、次のような新しい HTML ヘルパーも含まれています。
Chart
。 グラフをレンダリングします。ASP.NET 4 のグラフ コントロールと同じ機能を提供します。WebGrid
。 データ グリッドをレンダリングします。ページングと並べ替え機能を備えています。Crypto
。 ハッシュ アルゴリズムを使用して、適切にソルト化およびハッシュされたパスワードを作成します。WebImage
。 イメージをレンダリングします。WebMail
。 電子メールを送信します。Razor について詳しくは、次のリソースを参照してください。
ASP.NET MVC 3 の [ビューの追加] ダイアログ ボックスでは、操作するビュー エンジンを選択できます。[新しいプロジェクト] ダイアログ ボックスでは、プロジェクトの既定のビュー エンジンを指定できます。 Web Forms ビュー エンジン (ASPX)、Razor、または Spark、NHaml、NDjango などのオープンソース ビュー エンジンを選択できます。
アクション メソッドの実行前またはアクション メソッドの実行後にロジックを実行したい場合があります。 これをサポートするために、ASP.NET MVC 2 はアクション フィルターを提供しています。 アクション フィルターは、特定のコントローラーのアクション メソッドに、アクション前とアクション後の動作を追加するための宣言型の手段を提供するカスタム属性です。 ただし、場合によっては、すべてのアクション メソッドに適用されるアクション前またはアクション後の動作を指定したい場合があります。 MVC 3 では、グローバル フィルターを GlobalFilters
コレクションに追加することでこれらを指定できます。 グローバル アクション フィルターの詳細については、次のリソースを参照してください。
MVC 2 コントローラーでは、遅延バインディング ディクショナリ API を使用してビュー テンプレートにデータを渡すことを可能にする ViewData
プロパティがサポートされています。 MVC 3 では、ViewBag
プロパティと共に多少単純な構文を使用して、同じ目的を達成することもできます。 たとえば、ViewData["Message"]="text"
を記述する代わりに、ViewBag.Message="text"
を記述できます。 ViewBag
プロパティを使用するために、厳密に型指定されたクラスを定義する必要はありません。 これは動的プロパティであるため、代わりにプロパティを取得または設定するだけで、これらのプロパティは実行時に動的に解決されます。 内部的には、ViewBag
プロパティは名前と値のペアとして ViewData
ディクショナリに保存されます。 (注: MVC 3 のほとんどのプレリリース バージョンでは、ViewBag
プロパティの名前は ViewModel
プロパティでした。)
MVC 3 では、次の ActionResult
型および対応するヘルパー メソッドが新規であるか拡張されています。
RedirectPermanent
、RedirectToRoutePermanent
、RedirectToActionPermanent
) が用意されました。 これらのメソッドは、Permanent
プロパティが true
に設定された RedirectResult
のインスタンスを返します。既定では、MVC 3 の Ajax および検証ヘルパーは、控えめな JavaScript アプローチを使用します。 控えめな JavaScript は、インライン JavaScript を HTML に挿入することを回避します。 これにより、HTML が小さくなってすっきりし、JavaScript ライブラリの入れ替えやカスタマイズが容易になります。 MVC 3 の検証ヘルパーは、既定で jQueryValidate
プラグインも使用します。 MVC 2 の動作が必要な場合は、web.config ファイル設定を使用して、控えめな JavaScript を無効にすることができます。 JavaScript と Ajax の機能強化の詳細については、次のリソースを参照してください。
以前のバージョンの MVC では、クライアント側の検証を有効にするには、ビューから Html.EnableClientValidation
メソッドを明示的に呼び出す必要がありました。 MVC 3 では、クライアント側の検証が既定で有効であるため、これは不要になりました。 (これを無効にするには、web.config ファイルの設定を使用します。)
クライアント側の検証を機能させるには、サイト内の適切な jQuery および jQuery 検証ライブラリを引き続き参照する必要があります。 これらのライブラリは、独自のサーバーでホストすることも、Microsoft や Google のコンテンツ配信ネットワーク (CDN) などの CDN から参照することもできます。
ASP.NET MVC 3 では、jQuery 検証プラグインのリモート検証コントロールのサポートを活用できる新しい RemoteAttribute クラスがサポートされています。 これにより、サーバー上で定義したカスタム メソッドをクライアント側の検証ライブラリが自動的に呼び出し、サーバー側でしか実行できない検証ロジックを実行できるようになります。
次の例では、UserName
フィールドを検証するために、Remote
属性で、クライアント検証によって 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";
}
}
Remote
属性の使用方法の詳細については、MSDN ライブラリの「方法: ASP.NET MVC でリモート検証を実装する」を参照してください。
ASP.NET MVC 3 には、アクション メソッドが JSON でエンコードされたデータを受け取り、それをアクション メソッド パラメーターにモデル バインドできるようにする、組み込みの JSON バインドサポートが含まれています。 この機能は、クライアント テンプレートとデータ バインディングが含まれるシナリオで役立ちます。 (クライアント テンプレートを使用すると、クライアントで実行されるテンプレートを使用して、1 つのデータ項目または一連のデータ項目を書式設定および表示できます。)MVC 3 では、サーバー上で JSON データを送受信するアクション メソッドにクライアント テンプレートを簡単に接続できます。 JSON バインディングのサポートの詳細については、Scott Guthrie の MVC 3 プレビューに関するブログ投稿の「JavaScript と AJAX の機能強化」セクションを参照してください。
ASP.NET MVC 3 は、DisplayAttribute
のような DataAnnotations
メタデータ属性をサポートしています。
ValidationAttribute
クラスは、.NET Framework 4 で、検証対象のオブジェクトなど、現在の検証コンテキストに関する詳細情報を提供する新しい 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 プレビューに関するブログ投稿の「モデル検証の機能強化」セクションを参照してください。 (ただし、ブログでの "IValidateObject" に関する言及は "IValidatableObject" であることに注意してください。)
ASP.NET MVC 3 では、依存関係の挿入 (DI) の適用と、依存関係の挿入または制御の反転 (IOC) コンテナーとの統合のサポートが強化されています。 DI のサポートは、次の領域に追加されています。
MVC 3 は、共通サービス ロケーター ライブラリと、そのライブラリの IServiceLocator
インターフェイスをサポートする DI コンテナーをサポートしています。 また、DI フレームワークの統合を容易にする新しい IDependencyResolver
インターフェイスもサポートしています。
MVC 3 の DI について詳しくは、次のリソースを参照してください。
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 のドキュメントを参照してください。
ASP.NET MVC では、バージョン 1 以降、ページ全体の応答の出力キャッシュがサポートされています。 MVC 3 では、部分ページ出力キャッシュもサポートされています。このため、応答の領域またはフラグメントを簡単にキャッシュできます。 キャッシュの詳細については、MVC 3 リリース候補に関する Scott Guthrie のブログ記事の「部分ページ出力キャッシュ」セクションと MVC 3 リリース ノートの「子アクション出力キャッシュ」セクションを参照してください。
ASP.NET MVC には、XSS および HTML インジェクション攻撃から自動的に保護するのに役立つ要求の検証が組み込まれています。 ただし、ユーザーが HTML コンテンツ (ブログ エントリや CMS コンテンツ内など) を投稿できるようにしたい場合など、要求の検証を明示的に無効にしたい場合があります。 モデルまたはビュー モデルに AllowHtml 属性を追加して、モデル バインド中にプロパティごとに要求の検証を無効にできるようになりました。 要求の検証の詳細については、次のリソースを参照してください。
ASP.NET MVC 3 では、プロジェクト テンプレート、ビュー エンジン、単体テスト プロジェクト フレームワークを [新しいプロジェクト] ダイアログ ボックスに追加できます。
ASP.NET MVC 3 スキャフォールディング テンプレートは、以前のバージョンの MVC よりも、モデル上の主キー プロパティを識別し、これらを適切に処理する能力が優れています。 (たとえば、スキャフォールディング テンプレートでは、主キーが編集可能なフォーム フィールドとしてスキャフォールディングされないよう徹底できるようになりました。)
既定では、作成スキャフォールディングと編集スキャフォールディングで Html.TextBoxFor
ヘルパーの代わりに Html.EditorFor
ヘルパーが使用されるようになりました。 これにより、[ビューの追加] ダイアログ ボックスでビューが生成されるときのデータ注釈属性の形式で、モデルでのメタデータのサポートが強化されます。
LabelFor
メソッドと LabelForModel
ヘルパー メソッドに新しいメソッド オーバーロードが追加されました。 この新しいオーバーロードを使用すると、ラベル テキストを指定またはオーバーライドできます。
ASP.NET MVC 3 では、コントローラー クラスでセッション状態を使用するかどうかを、さらに、使用する場合は、セッション状態を読み取り/書き込みと読み取り専用のどちらにするかを指定できます。 セッションレス コントローラーのサポートの詳細については、MVC 3 リリース ノートを参照してください。
AdditionalMetadata 属性を使用して、モデル プロパティの ModelMetadata.AdditionalValues
ディクショナリを設定できます。 たとえば、管理者にのみ表示する必要があるプロパティがビュー モデルにある場合は、次の例に示すように、そのプロパティに注釈を付けることができます。
public class ProductViewModel
{
[AdditionalMetadata("AdminOnly", true)]
public string RefundCode {get; set;}
}
このメタデータは、製品ビュー モデルがレンダリングされるときに、任意の表示テンプレートまたはエディター テンプレートで使用できるようになります。 メタデータ情報を解釈するかどうかは開発者次第です。
インターネット プロジェクト テンプレートの AccountController が大幅に改善されました。
Windows 認証を有効にし、AccountController を削除する、新しいイントラネット プロジェクト テンプレートが含まれています。
トレーニング
ラーニング パス
FastTrack サービス、データ管理などを使用して、財務と運用アプリの実装を成功させるためのプロジェクト方法論を計画および設計します。