少し前に Visual Studio 2013 と同時に ASP.NET MVC 5 がリリースされましたが、既に開発チームは ASP.NET MVC 5.1 の開発を進めています。
そして aspnetwebstack は MyGet で署名済みの Nightly Build を公開してくれているので、誰でも簡単に試せるようになってます。なので、今回は ASP.NET MVC 5.1 の新機能を一足早く試してみます。
Nightly Build の取得方法は CodePlex に詳しく記載されています。
ASP.NET MVC / Web API / Web Pages - Documentation
NuGet の設定から aspnetwebstack のフィードを追加すると、リリース前パッケージ扱いで ASP.NET MVC 5.1 alpha 1 が見えるようになります。
当然ながら関連する Razor や Web Pages も 3.1 になっています。基本的にはバグ修正になりますが、多少の新機能も今の段階で入っているみたいです。
自分が気が付いたのは以下になります。
- HTML ヘルパーでの Enum サポート
- EnumHelper クラスの追加
- Html.EnumDropDownListFor ヘルパー追加
この Enum サポートは恐らくはまだ作業途中で、EnumDropDownListFor しか実装されていないですが、Enum から SelectList への変換という重要なメソッドは EnumHelper クラスに実装されているので、ListBoxFor などにも早期に適用できるかと思います。
ちなみにこの EnumHelper には以下の 2 つのメソッドが用意されています。
- IsValidForEnumHelper メソッド
- Enum であるか、Enum の場合は FlagsAttribute が付いていないかチェック
- GetSelectList メソッド
- Enum の値から IList
を取得する
- Enum の値から IList
例として以下のような Enum を用意しておきます。
public enum TwitterUser { [Display(Name = "こすもす")] Kamebuchi, [Display(Name = "割と普通")] Normalian, [Display(Name = "だるやなぎ")] Daruyanagi }
この Enum に対して EnumHelper.GetSelectList を呼び出すと、以下のようなコレクションが返ってきます。
Display 属性の値をちゃんと見ているのが分かってもらえるかと思います。
このような SelectList が取得できれば、今まで通り DropDownListFor などで使うことは出来ますが、今回追加された EnumDropDownListFor を使えば、プロパティの型を見て自動的に SelectList を作ってくれます。
なので、以下のようなコードだけで対応出来ます。
// User プロパティは TwitterUser 型のプロパティ
@Html.EnumDropDownListFor(model => model.User)
実行してみると、ちゃんと Enum の値を持ったドロップダウンリストが表示されました。
ちゃんと Display 属性で指定した名前が、ラベルとして表示されているのが良いです。割と ASP.NET MVC を使っている人にとっては待望の機能ではないでしょうか?
まだ alpha バージョンなので、これからいろいろと変わっていく可能性はありますが、正式リリースが期待される機能だと思います。