2015年2月8日日曜日

【C#】都道府県コード順の列挙型都道府県

public enum Prefecture
    {
        北海道 = 1,
        青森県 = 2,
        岩手県 = 3,
        宮城県 = 4,
        秋田県 = 5,
        山形県 = 6,
        福島県 = 7,
        茨城県 = 8,
        栃木県 = 9,
        群馬県 = 10,
        埼玉県 = 11,
        千葉県 = 12,
        東京都 = 13,
        神奈川県 = 14,
        新潟県 = 15,
        富山県 = 16,
        石川県 = 17,
        福井県 = 18,
        山梨県 = 19,
        長野県 = 20,
        岐阜県 = 21,
        静岡県 = 22,
        愛知県 = 23,
        三重県 = 24,
        滋賀県 = 25,
        京都府 = 26,
        大阪府 = 27,
        兵庫県 = 28,
        奈良県 = 29,
        和歌山県 = 30,
        鳥取県 = 31,
        島根県 = 32,
        岡山県 = 33,
        広島県 = 34,
        山口県 = 35,
        徳島県 = 36,
        香川県 = 37,
        愛媛県 = 38,
        高知県 = 39,
        福岡県 = 40,
        佐賀県 = 41,
        長崎県 = 42,
        熊本県 = 43,
        大分県 = 44,
        宮崎県 = 45,
        鹿児島県 = 46,
        沖縄県 = 47

    }


ASP.NET MVC 5.1では、Razorに列挙型の情報をもとにドロップダウンリストボックスを生成するEnumDropDownListメソッドが追加されました。
上記のような都道府県の列挙型クラスを用意して以下のように渡してやれば

@Html.EnumDropDownListFor(model => model.Prefecture)

以下のように展開されます。

<select data-val="true" id="Prefecture" name="Prefecture">
<option value="1">北海道</option>
<option value="2">青森県</option>
<option value="3">岩手県</option>
<option value="4">宮城県</option>
<option value="5">秋田県</option>
・
・
・
</select>

列挙型にいちいち値を指定しているのは、都道府県コードに一致させたいためです。
(値を指定しないと列挙型の内部的な値は0,1,2・・・となります)
HTMLに展開された時にドロップダウンリストのvalueの値が列挙型の内部の値になるため、
都道府県コードと合わせておいてやるとAjaxZip3なんかの郵便番号自動補完に対応することができます。