しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

ASP.NET MVC 5.1 の新機能を Nightly Build で試してみた

少し前に 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 が見えるようになります。

f:id:shiba-yan:20131114132421p:plain

当然ながら関連する 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 を用意しておきます。

public enum TwitterUser
{
    [Display(Name = "こすもす")]
    Kamebuchi,

    [Display(Name = "割と普通")]
    Normalian,

    [Display(Name = "だるやなぎ")]
    Daruyanagi
}

この Enum に対して EnumHelper.GetSelectList を呼び出すと、以下のようなコレクションが返ってきます。

f:id:shiba-yan:20131114230211p:plain

Display 属性の値をちゃんと見ているのが分かってもらえるかと思います。

このような SelectList が取得できれば、今まで通り DropDownListFor などで使うことは出来ますが、今回追加された EnumDropDownListFor を使えば、プロパティの型を見て自動的に SelectList を作ってくれます。

なので、以下のようなコードだけで対応出来ます。

// User プロパティは TwitterUser 型のプロパティ
@Html.EnumDropDownListFor(model => model.User)

実行してみると、ちゃんと Enum の値を持ったドロップダウンリストが表示されました。

f:id:shiba-yan:20131114225002p:plain

ちゃんと Display 属性で指定した名前が、ラベルとして表示されているのが良いです。割と ASP.NET MVC を使っている人にとっては待望の機能ではないでしょうか?

まだ alpha バージョンなので、これからいろいろと変わっていく可能性はありますが、正式リリースが期待される機能だと思います。