DropDownListFor из Enum со значением по умолчанию с использованием ViewModel - PullRequest
2 голосов
/ 22 декабря 2011

Как мне настроить ViewModel и View для поддержки выпадающего списка, который содержал следующее Enum:

public enum PersonType
{
   Bride,
   Groom
}

Я бы хотел, чтобы в тексте раскрывающегося списка отображались "Невеста", "Жених", а значение было равно 0 и 1 соответственно. Я хотел бы настроить по умолчанию (или жених или невеста) для представления, а также. Цель этого - создать форму «Создать», которую я опубликую, а затем определю, какая опция была выбрана (я предполагаю, что мне понадобится int внутри моей ViewModel, чтобы отслеживать то, что выбрал пользователь). Как это будет связано? Я использую бритву.

Ответы [ 2 ]

4 голосов
/ 22 декабря 2011
public enum PersonType
{
   Bride=0,
   Groom=1
}

в вашей модели у вас будет свойство типа

public class mymodel{

[Required(ErrorMessage="this field is required")]
public int ID{get;set;}
public IEnumerable<KeyValuePair<string, string>> _list{get;set}
}

в вашем контроллере

mymodel model = new mymodel();

model._list=Enum.GetNames(typeof(PersonType))
             .Select(x => new KeyValuePair<string, string>(x, x.ToString()));
return View(model);

и по вашему мнению

@Html.DropDownListFor(x=>x.ID,new SelectList(model._list,"key","value"))
@ValidationMessageFor(x=>x.ID)
1 голос
/ 22 декабря 2011

Я создал HtmlHelper для перечислений - и настроил шаблон строки по умолчанию для использования этого помощника, если типом модели является перечисление.

Это означает, что я могу просто перейти @Html.EnumDropDownListFor( x => x.PersonType ), и он будет отображатьвыпадающий список с опциями перечисления.

Я скопировал помощника из этого блога и добавил следующее в шаблон строки в \ Shared \ EditorTemplates \ String.cshtml

@model object
@if (Model is Enum)
{
    @Html.EnumDropDownListFor(x => x)
}
else
{
    @Html.TextBoxFor(x => x)
}

Это означает, что я получу выпадающий список для любого перечисления, не беспокоясь об изменении модели представления.

Помощник не устанавливает значения поля выбора в базовое число, ноэто все еще связывает с параметрами действия хорошо.Вы должны иметь возможность довольно легко редактировать помощника, имея достаточно простой номер в раскрывающемся списке.

...