ASP.NET MVCのHtml.DropDownList()ヘルパーは、サーバーサイドで生成されるセレクトボックスを簡潔にレンダリングするための拡張メソッドです。以下に、代表的な使用ケースと内部動作の理解に役立つ実装例を示します。
静的選択肢と初期選択の設定
モデル値に依存せず、固定オプションをコード内で定義し、特定項目をデフォルト選択状態にする方法です。
// コントローラー側(例:Editアクション)
var statusOptions = new List<SelectListItem>
{
new SelectListItem { Text = "有効", Value = "true", Selected = Model.IsActive },
new SelectListItem { Text = "無効", Value = "false", Selected = !Model.IsActive }
};
ViewData["StatusOptions"] = statusOptions;
ビューでは次のように呼び出します:
<%= Html.DropDownList("IsActive", ViewData["StatusOptions"] as IEnumerable<SelectListItem>) %>
データベース連携による動的選択リスト
外部データソース(例:カテゴリテーブル)から取得した結果をSelectListに変換して渡すパターンです。
// コントローラー
public ActionResult Create()
{
var categories = _categoryRepository.GetAll();
ViewData["CategoryList"] = new SelectList(categories, "CategoryId", "DisplayName", Model?.CategoryId);
return View();
}
ビューでの利用:
<%= Html.DropDownList(
"CategoryId",
ViewData["CategoryList"] as SelectList,
"-- 選択してください --",
new { @id = "category-select", @data_role = "dropdown" }) %>
オーバーロードされたシグネチャとその用途
基本形(nameのみ)
public static MvcHtmlString DropDownList(this HtmlHelper htmlHelper, string name)
ViewDataまたはViewBagにnameキーでIEnumerable<SelectListItem>が格納されている前提。自動的にname属性とid属性が付与されます。
選択肢明示型(name + selectList)
public static MvcHtmlString DropDownList(
this HtmlHelper htmlHelper,
string name,
IEnumerable<SelectListItem> selectList)
インラインで選択肢を構築可能。ViewData経由の依存を排除できます。
<%= Html.DropDownList("Priority", new[] {
new SelectListItem { Text = "高", Value = "High" },
new SelectListItem { Text = "中", Value = "Medium" },
new SelectListItem { Text = "低", Value = "Low" }
}) %>
プレースホルダー付き型(name + optionLabel)
public static MvcHtmlString DropDownList(
this HtmlHelper htmlHelper,
string name,
string optionLabel)
空の先頭オプション(例:"-- 選択してください --")を追加。選択必須でないフォームに適しています。
補足:SelectListの代替手段
ASP.NET Core以降ではViewDataよりViewBagや@modelプロパティ経由の渡しが推奨されますが、MVC 5環境ではSelectListのコンストラクタ引数順序(items, dataValueField, dataTextField, selectedValue)を正しく指定することが重要です。誤った順序は空のドロップダウンや例外を引き起こす可能性があります。