如何将日期值列为 ListBox 的可枚举值列表

How can I list date values as enumerable values list for 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
}

值加载到我的列表框中,如下所示

 @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 反对我尝试解析的数值,但它仍然不会 运行。如何设置枚举以正确显示日期范围值?

根据 MSDN 文档,

An enumeration is a set of named constants whose underlying type is any integral type

作为常量,它们的名称不能像任何其他变量一样使用数字作为第一个字符来定义。此外,考虑到每个教学年总是在开始后的那一年结束,将结束年份放在名称本身中是多余的。我建议你应该更改名称并使用这样的属性装饰器:

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文档以正确使用。

在您的视图中,您可以尝试进行以下更改:

        <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>