Требуется ли перечисление для ViewModel в ядре dotnet? - PullRequest
0 голосов
/ 25 мая 2018
public class MyViewModel
{
    [Required]
    public MyEnum MyEnum { get; set; }
}

public enum MyEnum
{
    First,
    Second
}

Тогда, на мой взгляд ..

<form action="/Go/Here" method="post">
    <select asp-for="MyEnum" asp-items="Html.GetEnumSelectList<MyEnum>()">
    <option selected="selected" value="">Please Select..</option>
    </select>
<button type="submit" value="Submit">Submit</button>

Я пытаюсь создать сгенерированную форму enum, для которой требуется выбор без значения по умолчанию первого значения.Тем не менее, в настоящее время они могут отправлять сообщения, когда выбран Please Select.. и dotnet будет думать, что выбран MyEnum.First.Возможно ли это сделать без добавления значения Enum по умолчанию и проверки, что значение enum по умолчанию не выбрано?Потому что это выглядит очень глупо.

1 Ответ

0 голосов
/ 25 мая 2018

За сценой перечисления - это числа.Когда вы отобразите свою страницу, вы увидите, что опция «Первый» выбрана вместо «Пожалуйста, выберите ..».Это связано с тем, что параметр с текстом «Первый» имеет значение 0, а 0 - значение по умолчанию для типа int.Поэтому, когда форма отправляется с параметром «Пожалуйста, выберите», элемент данных формы для «MyEnum» будет пустым / пустым, но так как тип не обнуляемый тип, связыватель модели установит первый параметр перечисления.

Вы должны изменить свой тип на nullable enum.

public class MyViewModel
{
    [Required]
    public MyEnum? MyEnum { get; set; }
}

Теперь, когда пользователь выбирает «Пожалуйста, выберите» и отправляете форму, значение будет NULL вместо первого перечисления (0)

...