Удалить пустую запись из EnumDropDownListFor - PullRequest
0 голосов
/ 13 февраля 2019

Я хочу удалить пустую / пустую запись из моего EnumDropDownListfor - произвел поиск в Интернете и пробовал ссылки ниже, но, похоже, ничего не работает

Удалите пустую / пустую запись в верхней части поля EnumDropDownListFor

Удалить пустую запись из EnumDropDownListFor (...)?

Код в представлении: -

<td>
@Html.EnumDropDownListFor(model => model.Actions, new { @id = "actions", @class = "form-control" })
</td>

Код в модели: -

[Required]
    [Range(1, int.MaxValue, ErrorMessage = "Select an Action")]
    [Display(Name = "Actions")]
    public ItemTypes Actions { get; set; }

Перечисление в контроллере: -

 public enum ItemTypes
    {
        Add = 1,
        Remove = 2
    }

Раскрывающийся список отображается следующим образом: -

enter image description here

1 Ответ

0 голосов
/ 13 февраля 2019

Похоже, ваша проблема в том, что enum определен с начальным индексом 1:

public enum ItemTypes
{
    Add = 1,
    Remove = 2
}

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

Либо вы можете определить перечислитель с индексом 0, чтобы установить выбранный по умолчаниюзначение:

public enum ItemTypes
{
    Nothing = 0,
    Add = 1,
    Remove = 2
}

Или используйте стандартный DropDownListFor помощник, используя другое свойство, определенное из SelectListItem для привязки значений перечисления:

Модель

public List<SelectListItem> ActionList { get; set; }

Контроллер

ActionList = Enum.GetNames(typeof(ItemTypes)).Select(x => new SelectListItem { Text = x, Value = x }).ToList();

Вид

@Html.DropDownListFor(model => model.Actions, Model.ActionList, new { @id = "actions", @class = "form-control" })

Ссылка:

C # Типы перечисления (MS Docs)

...