Как я могу перечислить значения даты как список перечислимых значений для ListBox - PullRequest
0 голосов
/ 28 февраля 2019

Я загружаю ListBox из модели, которая выглядит следующим образом

public class FilterModel
{
    public Learning TypeOfLearning { get; set; }
    public TeachingYear Teaching { get; set; }
}

public enum Learning
{
    All,
    Frameworks,
    Qualifications,
    Units,
    Standards
}

public enum TeachingYear
{
    2016/2017,
    2017/2018,
    2018/2019,
    2019/2020
}

Значения загружаются в мой ListBox, как показано ниже

 @Html.DropDownList("LearningType", new SelectList(Enum.GetValues(typeof(Learning))),
                              "Select Learning Type", new { @style = "width: 350px" })

 @Html.DropDownList("TeachingYeare",
                              new SelectList(Enum.GetValues(typeof(TeachingYear))),
                              "Select Teaching Year", new { @style = "width: 350px" })

Обучение работает нормально, но объекты TeachingYearчисловые значения, которые я пытался разобрать, но он все равно не запустится.Как настроить перечисление для правильного отображения значений диапазона дат?

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

В вашем View вы можете попробовать следующие изменения:

        <div class="form-group">
            <select asp-for="learning"
                    asp-items="@Html.GetEnumSelectList<Learning>()">
                <option>Select Learning Type</option>
            </select>
        </div>
        <div class="form-group">
            <select asp-for="learning"
                    asp-items="@Html.GetEnumSelectList<TeachingYear>()">
                <option>Select Teaching Year</option>
            </select>
        </div>
0 голосов
/ 28 февраля 2019

Согласно документации MSDN,

Перечисление - это набор именованных констант, базовый тип которых является целым типом

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

using System.ComponentModel.DataAnnotations;    

public enum TeachingYear
{
    [Display(Name = "2016/2017")]
    _2016,
    [Display(Name = "2017/2018")]
    _2017,
    [Display(Name = "2018/2019")]
    _2018,
    [Display(Name = "2019/2020")]
    _2019
}

, чтобы при использовании хелпера EnumDropDownListFor html описания автоматически отображались в списке, а значения привязывались к объекту.,См. Также этот ответ здесь.

РЕДАКТИРОВАТЬ: Учитывая ваш последний комментарий о структуре, в представлении

@Html.GetEnumSelectList<TeachingYear>()

должен сделать это, но я никогда не использовал .NET Core, так что вам лучше проверить соответствующую документацию MSDN для правильного использования.

...