Как я могу создать EditorTemplate для перечисления?

У меня есть модель с enum

public enum Gender
{
    Male,
    Female,
    Unspecified
}

public class FooClass
{
    public Gender UserGender {set; get;}
}

Поскольку этот Gender может использоваться в других классах, я хотел создать для него EditorTemplate и запросить редактор в представлении создания/редактирования:

@Html.EditorFor(model => model.UserGender)

После этого я создал частичное представление, расположенное в Views/Shared/EditorTemplates/Gender.cshtml. В шаблон я добавил кое-что только для тестирования, например:

@model TestProject.Models.Entity.Gender
@Html.TextBox("")

or

@model TestProject.Models.Entity.Gender
Hello...

но все, что я получаю, это исключение:

Элемент модели, переданный в словарь, имеет значение null, но для этого словаря требуется ненулевой элемент модели типа TestProject.Models.Entity.Gender.

Это то, как работают шаблоны редактора, или я полностью сбился с пути?

изменить:

Если я удалю файл шаблона (Gender.cshtml), я получу текстовое поле в качестве редактора, и никаких исключений не будет.

Кроме того, это для представления Create, и в контроллере я не передаю ему объект. Я просто звоню return View();


person Odys    schedule 07.12.2013    source источник
comment
Ваша модель FooClass скорее всего нулевая.   -  person Mat J    schedule 07.12.2013
comment
Вы можете предоставить представление и действие контроллера?   -  person Grundy    schedule 07.12.2013
comment
@Mathew Скорее всего, так как он находится в режиме создания. Должен ли я передать новый экземпляр модели в представлении? Кроме того, не могли бы вы указать, каким должно быть перечисление EditorTemplate?   -  person Odys    schedule 07.12.2013
comment
@odyodyodys в представлении «Создать» использует значение модели по умолчанию со значением полей по умолчанию.   -  person Grundy    schedule 07.12.2013
comment
@ Гранди, спасибо. Если я создам редактор по умолчанию для пола, я получу текстовое поле для перечисления.   -  person Odys    schedule 07.12.2013
comment
Это шаблон редактора по умолчанию для примитивных типов.   -  person Mat J    schedule 07.12.2013
comment
также вы можете использовать Nullable<TestProject.Models.Entity.Gender>   -  person Grundy    schedule 07.12.2013
comment
@Grundy забыл об этом. Спасибо. Не могли бы вы предоставить пример того, как я могу создать EditorTemplate? Что-то, чтобы я начал   -  person Odys    schedule 08.12.2013
comment
@odyodyodys, ты пытаешься использовать код в моем ответе?   -  person Grundy    schedule 08.12.2013


Ответы (1)


вы можете попробовать что-то вроде этого

@model Nullable<TestProject.Models.Entity.Gender>
@Html.ListBox("lb", Enum.GetValues(typeof(TestProject.Models.Entity.Gender)).Cast<TestProject.Models.Entity.Gender>().Select(i => new SelectListItem() { Text = i.ToString(), Value = i.ToString(), Selected=i==Model }))
person Grundy    schedule 07.12.2013