Deep Insider の Tutor コーナー
>>  Deep Insider は本サイトからスピンオフした姉妹サイトです。よろしく! 
書籍転載:ASP.NET MVC 5 実践プログラミング

書籍転載:ASP.NET MVC 5 実践プログラミング

ASP.NET MVC 5.1: 列挙型から選択ボックスを生成する - EnumDropDownListメソッド[Razor]

2014年10月7日

ASP.NET MVC 5.1以降。列挙型の情報をもとに選択ボックスを生成するEnumDropDownListメソッドの使い方を解説。書籍転載の8本目(基礎編「4-2-5」)。

  • このエントリーをはてなブックマークに追加

書籍転載について

 本コーナーは、秀和システム発行の書籍『ASP.NET MVC 5 実践プログラミング』の中から、特にBuild Insiderの読者に有用だと考えられる項目を編集部が選び、同社の許可を得て転載したものです。

 

 『ASP.NET MVC 5 実践プログラミング』の詳細や購入は秀和システムのサイト目次ページをご覧ください。

ご注意

 本記事は、書籍の内容を改変することなく、そのまま転載したものです。このため用字用語の統一ルールなどはBuild Insiderのそれとは一致しません。あらかじめご了承ください。

4-2-5 列挙型から選択ボックスを生成する[5.1]- EnumDropDownListメソッド

 ASP.NET MVC 5.1では、列挙型の情報をもとに選択ボックスを生成するEnumDropDownListメソッドも追加されました。

【構文】EnumDropDownListForメソッド

MvcHtmlString EnumDropDownListFor(Expression<Func<TModel, TProperty>> expression [,String optionLabel] [,Object htmlAttributes])

  • TModel: モデルの型
  • TProperty: 値の型
  • expression: プロパティを識別する式
  • optionLabel: 空項目の表示テキスト
  • htmlAttributes: その他の属性

 たとえば、以下のようなCategoryEnum列挙体と、CategoryEnum型のCategoryプロパティを想定してみます。

C#
using System.ComponentModel.DataAnnotations;
...中略...

public class Article
{
  ...中略...
  [DisplayName(" カテゴリー ")]
  public CategoryEnum Category { get; set; }
  ...中略...
}
リスト4-7 Models/Article.cs
C#
using System.ComponentModel.DataAnnotations;
...中略...

public enum CategoryEnum
{
  [Display(Name = ".NET")]
  DotNet,
 
  [Display(Name = "クラウド")]
  Cloud,
 
  [Display(Name = "リファレンス")]
  Reference
}
リスト4-8 Models/CategoryEnum.cs

 このようなデータモデルに対して、EnumDropDownListメソッドを呼び出すと、以下のような結果が得られます。

Razor
@model MvcView.Models.Article
...中略...

カテゴリ
@Html.EnumDropDownListFor(model => model.Category)
HTML
カテゴリー:
<select id="Category" name="Category">
  <option value="0">.NET</option>
  <option value="1">クラウド</option>
  <option selected="selected" value="2">リファレンス</option>
</select>

 CategoryEnum列挙体のメンバーが選択オプションとして展開されていること、Display属性で宣言された名前が表示テキストとして認識されていることを確認してください。

 ちなみに、EnumHelper.GetSelectListメソッドを利用することで、列挙体から選択オプションを表すIList<SelectListItem>オブジェクトを生成することもできます。

【構文】GetSelectListメソッド

IList GetSelectList(Type type)

  • type: 任意の列挙型

 以下は、(そうする意味はあまりありませんが)GetSelectListメソッドの戻り値から従来のDropDownListForメソッドを呼び出す例です。

Razor
@Html.DropDownListFor(
  model => model.Category,
  EnumHelper.GetSelectList(typeof(MvcView.Models.CategoryEnum))
)
リスト4-10 Views/View/SelectEnum.cshtml
メソッド概要
BeginForm フォームを生成(<form>タグ)
BeginRouteForm フォームを生成(<form>タグ。ルートパラメーターで指定可能)
EndForm フォームを終了(</form>閉じタグ)
LabelForLabel ラベルを生成
TextBoxForTextBox テキストボックスを生成
TextAreaForTextArea テキストエリア(複数行テキストボックス)を生成
PasswordForPassword パスワード入力ボックスを生成
HiddenForHidden 隠しフィールドを生成
RadioButtonForRadioButton ラジオボタンを生成
CheckBoxForCheckBox チェックボックスを生成
DropDownListForDropDownList 選択ボックスを生成
EnumDropDownListFor Enum型をもとに選択ボックスを生成
ListBoxForListBox リストボックスを生成
表4-1 フォーム関連のビューヘルパー(再掲)

※以下では、本稿の前後を合わせて5回分(第6回~第10回)のみ表示しています。
 連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。

書籍転載:ASP.NET MVC 5 実践プログラミング
6. TextBoxFor/TextAreaFor/PasswordFor/ HiddenFor/RadioButtonFor/CheckBoxForメソッド[Razor]

モデル内の各プロパティのデータ型や値などの情報に基づいて、テキストボックス、ラジオボタンなどの要素を生成できるXxxxxForメソッドの使い方を解説。書籍転載の6本目(基礎編「4-2-3」)。

書籍転載:ASP.NET MVC 5 実践プログラミング
7. 選択ボックス/リストボックスを生成する - DropDownListFor/ListBoxForメソッド[Razor]

DropDownListFor/ListBoxForメソッドを使って、単一選択式の選択ボックスや複数選択式のリストボックスを生成する方法を解説。書籍転載の7本目(基礎編「4-2-4」)。

書籍転載:ASP.NET MVC 5 実践プログラミング
8. 【現在、表示中】≫ ASP.NET MVC 5.1: 列挙型から選択ボックスを生成する - EnumDropDownListメソッド[Razor]

ASP.NET MVC 5.1以降。列挙型の情報をもとに選択ボックスを生成するEnumDropDownListメソッドの使い方を解説。書籍転載の8本目(基礎編「4-2-5」)。

書籍転載:ASP.NET MVC 5 実践プログラミング
9. ASP.NET MVC 5.2: 選択ボックスの選択肢をグループ化する - SelectListクラス[Razor]

ASP.NET MVC 5.2以降。Razorで、選択肢をグルーピングした選択ボックスを生成するにはSelectListクラスを使用する。その使い方を解説。書籍転載の9本目(基礎編「4-2-6」)。

書籍転載:ASP.NET MVC 5 実践プログラミング
10. Label/TextBox/TextArea/Password/Hidden/ RadioButton/CheckBoxメソッド[Razor]

XxxxxForメソッドとは異なり、「For」なしのメソッドは、モデルから独立したフォーム要素を生成できる。その使い方を解説。書籍転載の10本目(基礎編「4-2-7」)。

サイトからのお知らせ

Twitterでつぶやこう!