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

时间:2019-02-28 11:58:07

标签: visual-studio-2017 asp.net-core-mvc html-helper html.dropdownlistfor

我正在从看起来像这样的模型中加载列表框

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对象使用的是我尝试解析的数值,但仍然无法运行。如何设置枚举以正确显示日期范围值?

2 个答案:

答案 0 :(得分:0)

根据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帮助器时,描述会自动显示在列表中,而值则绑定到该对象。另请参见this answer

编辑: 在视图中考虑您对框架的最新评论

@Html.GetEnumSelectList<TeachingYear>()

应该这样做,但我从未使用过.NET Core,因此您最好检查一下相关的MSDN文档以了解正确的用法。

答案 1 :(得分:0)

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

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