ドロップダウンリストを生成するには、ビューモデルに2つのプロパティが必要です。選択した値をバインドするスカラープロパティと、ドロップダウンに表示するアイテムを含むコレクションプロパティです。
したがって、ビューモデルを定義できます。
public class DropDownListViewModel
{
public string SelectedValue { get; set; }
public IEnumerable<SelectListItem> Items { get; set; }
}
次に、メインビューモデルに次のタイプのプロパティがあります。
public DropDownListViewModel Foo { get; set; }
これで、このタイプのカスタムエディタテンプレートを作成できます(~/Views/Shared/EditorTemplates/DropDownListViewModel.ascx
):
<%@ Control
Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DropDownListViewModel>"
%>
<%= Html.DropDownListFor(x => x.SelectedValue, Model.Items) %>
次に、メインビューで:
<%= Html.EditorFor(x => x.Foo) %>
あとは、コントローラーアクションでメインビューをレンダリングして、Foo
プロパティに対応する値を入力するだけです。はハードコーディングされているか、リポジトリから取得されている可能性があります。それは本当に重要ではありません。
一方、値を事前に知っている場合は、エディターテンプレート(~/Views/Shared/EditorTemplates/YesNoDropDown.ascx
)で値をハードコーディングできます。
<%= Html.DropDownList(
"",
new SelectList(
new[]
{
new { Value = "true", Text = "Yes" },
new { Value = "false", Text = "No" },
},
"Value",
"Text",
Model
)
) %>
その後:
<%= Html.EditorFor(x => x.IsActive, "YesNoDropDown") %>
または、ビューモデルのIsActiveプロパティを装飾することによって:
[UIHint("YesNoDropDown")]
public bool IsActive { get; set; }
その後:
<%= Html.EditorFor(x => x.IsActive) %>