[SkipRequestValidation]から[AllowHtml]
ASP.NET MVCには、HTMLおよびクロスサイトスクリプト挿入攻撃を防御するビルトインサポートがあるため、HTMLコンテンツを入力しようとするとエラーが投げられます。開発者は、これを有効にするために明示的に許可されていること(そしてアプリケーションがセキュリティ上それをサポートしていること祈りつつ)を示す必要がありました。
ASP.NET MVC 3では、HTML入力が有効であることを示すモデル/ビューモデルのプロパティに適用できる新しい属性もサポートするようになりました。それにより、さらに粗い防御がDRYな方法で可能になります。先月のRCリリースで、この属性は[SkipRequestValidation]と命名されました。RC2で、もっと直感的にするために[AllowHtml]に名前変更しました。

モデル/ビューモデル上に上記の[AllowHtml]属性を設定すると、ASP.NET MVC 3は、モデルのバインディング時に、そのプロパティでのHTML挿入の防御をオフにします。
- Html.Rawヘルパーメソッド
ASP.NET MVC 3で導入された新しいRazorビューエンジンは、デフォルトで出力が自動的にHTMLエンコードになります。これは、HTMLおよびスクリプト挿入攻撃へ1段階上の防御を提供します。
RC2では、Html.Rawを追加したので、出力をHTMLエンコードせずに、『そのまま』のコンテンツを描画したいことを明示的に示す時に使用できます。

ViewModel/ViewからViewBag
ASP.NET MVC(V1以降)は、コントローラやビュー内でViewData[]辞書をサポートしています。これにより、開発者は、遅延バインディングの形で、コントローラからビューへ情報を引き渡せます。
この方法は、強く型付けされたモデルクラスの代わり、もしくは強く型付けされたモデルクラスと組み合わせて使用できます。以下のコードはよくある使用ケースを示しており、ViewData[]辞書を通じて遅延バインディング された2つの変数に加え、強く型付けされたProductモデルがビューに引き渡されます。

ASP.NET MVC 3では、新しいAPIを導入し、.NET 4内で動的な型サポートを利用して、値を設定/取得できます。それにより、標準の『ドット』表示を使用して、引き渡される変数をいくらでも指定でき、それを行うために強く型付けされたクラスを作成する必要はありません。
以前のASP.NET MVC 3のプレビューで、コントローラのベースクラス上で『ViewModel』と呼ばれる動的プロパティと、ビューテンプレート内の『View』と呼ばれる動的プロパティを使用して、このAPIを公開しました。多くの人から、これらの2つの異なる名前がややこしいと指摘され、また何人かの人からは、よくASP.NET MVCで強く型付けされたViewModelクラスを作成し、このAPIは使用しないため、このコンテキストでViewModelという名前を使用することもややこしいと言われました。
RC2では、コントローラおよびビューの両方で、ViewBagという同じ名前の動的プロパティを公開しました。これは動的コレクションで、追加のデータを、コントローラからビューテンプレートに引き渡して、リスポンスの生成をサポートします。以下は、タイムスタンプのメッセージと、すべてのカテゴリの一覧をビューテンプレートに引き渡すために使用する方法を示しています。

以下は、リスポンスを生成するために、ViewBagに引き渡された2つの追加情報を、ビューテンプレート(これは、そのモデルとしてのProductクラスを期待しているため、強く型付けされています)が使用している例です。具体的には、動的ViewBagコレクションに引き渡されたカテゴリ一覧を使用して、ユーザーフレンドリなカテゴリ名のドロップダウンリストを生成し、ProductオブジェクトのCategoryIDプロパティの設定を簡単にしているところを確認してください。

上記のコントローラ/ビューの組合せは、その後HTMLを以下のように生成します。


