:
public abstract class DropdownVm
{
public List<SelectListItem> SetDropdown<T>(T value, IEnumerable<KeyValuePair<T, string>> options, params object[] prependLabelAndValues)
{
var dropdown = options.Select(o => new SelectListItem { Selected = Equals(o.Key, value), Value = o.Key.ToString(), Text = o.Value }).ToList();
for (int i = 0; i < prependLabelAndValues.Length; i += 2)
{
dropdown.Insert(0, new SelectListItem { Text = prependLabelAndValues[i].ToString(), Value = prependLabelAndValues[i + 1].ToString() });
}
return dropdown;
}
}
public class DropdownVm<T> : DropdownVm
{
public virtual bool HasModelErrors { get; set; }
public virtual T Input { get; set; }
public virtual List<SelectListItem> Dropdown { get; set; }
public virtual void SetDropdown(IEnumerable<KeyValuePair<T, string>> availableOptions, params object[] prependLabelAndValues)
{
this.Dropdown = SetDropdown(this.Input, availableOptions, prependLabelAndValues);
}
public override string ToString()
{
return Equals(Input, default(T)) ? string.Empty : Input.ToString();
}
}
:
var vm = new DropdownVm<string>();
vm.SetDropdown(new Dictionary<string, string> {
{ "option1", "Label 1" },
{ "option2", "Label 2" },
}, "(Choose a Value)", string.Empty);
, , :
var models = yourDataProvider.GetParadigms();
var vm = new DropdownVm<int>();
vm.SetDropdown(
models.ToDictionary(m => m.ParadigmId, m => m.Name),
"(Choose a Value)", string.Empty
);
:
<div class="field">
@Html.LabelFor(m => m.Input, "Choose")
@Html.DropDownListFor(m => m.Input, Model.Dropdown)
@Html.ValidationMessageFor(m => m.Input)
</div>