手探りASP.NET MVC(1) DropDownListメソッド

唐突ですが「手探りASP.NET MVC」をはじめます。内容としてはTipsを書いていきたいと思います。言語にはC#を使用します。自分用のメモなので、つぎはぎ・誤り等多いと思いますが、よろしくお願いします。ご意見、指摘事項等あればダイアリーのコメント、Twitter(http://twitter.com/bouzuya)などでいただけるとありがたいです。

さて、今回はSystem.Web.Mvc.HtmlHelperクラスのDropDownListメソッドについて紹介します。

HTMLでselect要素を使用することはよくあると思います。DropDownListメソッドはselect要素の生成を補助してくれます。

具体例を挙げます。複数の項目の中から特定の項目を選択した状態で表示する例を考えてみます。ここでは、選択肢の一覧はCategories、選択する項目はInitialCategoryというキーで、ViewDataプロパティにより与えられるものとします。

以下にDropDownListメソッドを使用しない場合のコードを示します。

<% var initialCategory = ViewData["InitialCategory"] as string; %>
<% var categories = ViewData["Categories"] as IEnumerable<string>; %>
<select name="category">
<% foreach (var category in categories) %>
<% { %>
	<% var isSelected = (category == initialCategory); %>
	<option value="<%= Html.AttributeEncode(category) %>" <%= (isSelected ? " selected=\"selected\"" : "") %>><%= Html.Encode(category) %></option>
<% } %>
</select>

冗長で読みづらいですね。

次にDropDownListメソッドを使用した場合のコードを示します。

<% var initialCategory = ViewData["InitialCategory"] as string; %>
<% var categories = ViewData["Categories"] as IEnumerable<string>; %>
<% var selectList = new SelectList(categories, initialCategory); %>
<%= Html.DropDownList("category", selectList) %>

すっきりしていて読みやすいです。

DropDownListメソッドの、第1引数はname属性およびid属性になります。第2引数は表示する項目(IEnumerable)です。

第2引数のためのデータ作成には、ベタで書くとSelectListItemをつめたListを作成することになると思います。しかし、この方法だと結局ループさせて選択項目を設定しないといけないため、DropDownListの恩恵が小さくなってしまいます。そこでSelectListクラスを使用します。SelectListクラスを併用することで、簡単に特定の項目を選択したIEnumerableを作成することができます。例には示していませんが、SelectListの他のコンストラクタでは、表示名として使用する項目、値として使用する項目を指定することも可能です。

良いですね、DropDownList & SelectList。