Enum .NET Core中的SelectList

时间:2018-02-09 15:35:27

标签: asp.net asp.net-mvc .net-core

我在视图中使用以下语法从我班级的Enum创建下拉列表。错误是

  

缺少一个或多个编译引用。可能的原因包括应用程序preserveCompilationContextbuildOptions下的project.json属性丢失。

<div class="form-group">
    <select asp-for="Subscription" class="form-control" asp-items="@new  SelectList(Enum.GetNames(typeof(SubscriptionTypes)))">
        <option disabled selected value="">Select a Subscription</option>
    </select>
</div>

班级中的Enum是:

public enum SubscriptionTypes
{
    Type1, Type2, Type3
}

2 个答案:

答案 0 :(得分:1)

您应该使用内置生成器来生成用户友好的值。请参见[Display(Name =“带空格的酷名称”]]枚举值的注释。

Html.GetEnumSelectList<CountryEnum>()

因此您的剃须刀页面如下所示:

@model CountryEnumViewModel

<form asp-controller="Home" asp-action="IndexEnum" method="post">
    <select asp-for="EnumCountry" 
            asp-items="Html.GetEnumSelectList<Some.NameSpace.CountryEnum>()">
    </select> 
    <br /><button type="submit">Register</button>
</form>

此处有更多信息:https://docs.microsoft.com/en-us/aspnet/core/mvc/views/working-with-forms?view=aspnetcore-2.2#the-select-tag-helper

答案 1 :(得分:0)

此问题的常见根本原因是在未指定SubscriptionTypes指令时使用非完全限定类型名称(如using)。

要解决此问题,请在源代码顶部添加using指令:

@using Your.Namespace.Here

或使用完全限定的类型名称:

<select asp-for="Subscription" class="form-control" asp-items="@new  SelectList(Enum.GetNames(typeof(Your.Namespace.Here.SubscriptionTypes)))">