Asp.net core Enum DropDownList始终返回列表中的第一个值

Asp.net core Enum DropDownList始终返回列表中的第一个值,asp.net-core,asp.net-core-mvc,.net-core,html.dropdownlistfor,editorformodel,Asp.net Core,Asp.net Core Mvc,.net Core,Html.dropdownlistfor,Editorformodel,我已经为我正在使用的一些枚举创建了几个EditorTemplate,以便在使用EditorForModel()时,它们将显示为DropDownList。但是,当我从列表中选择一个项目后提交表单时,它总是提交下拉列表中的第一个项目,而不是所选的项目 例如,如果我有一个名为“size”的枚举,它的值为“Small”、“Medium”和“Large”。EditorForModel将创建一个下拉列表,按“小”、“中”、“大”的顺序显示它们。如果我选择“大”,然后查看数据库中模型条目的详细信息,它会说“小

我已经为我正在使用的一些枚举创建了几个EditorTemplate,以便在使用EditorForModel()时,它们将显示为DropDownList。但是,当我从列表中选择一个项目后提交表单时,它总是提交下拉列表中的第一个项目,而不是所选的项目

例如,如果我有一个名为“size”的枚举,它的值为“Small”、“Medium”和“Large”。EditorForModel将创建一个下拉列表,按“小”、“中”、“大”的顺序显示它们。如果我选择“大”,然后查看数据库中模型条目的详细信息,它会说“小”,这是不正确的

下面是我所拥有的一些示例代码:

size.cshtml(编辑器模板)

创建.cshtml(视图)

@model=ProjectName.Models.Ball
@Html.EditorForModel()
Ball.cs(型号)

公开课舞会
{
[关键]
公共可空ID{get;set;}
公共字符串名称{get;set;}
公共选项。大小大小{get;set;}
}

不知何故,Ball的Size属性始终是下拉列表中的第一个值,即“小”。无论我选择什么。

尝试从value.toString()中删除.toString()

如果您在浏览器中检查下拉列表,您将看到它的版本名为
Size.Size
。当您发布到
Create
操作时,这会导致绑定不起作用(假设这只是一个
Ball
模型,因为这里没有包含它),因为这是一个名为
Size
的对象

当我更改您的EditorTemplate时,它适用于我,因此最后一行是:

@Html.DropDownListFor(m => m, items)

使用
DropDownListFor
可确保生成的
select
元素获得正确的名称。

如果不设置所选值并提交,会发生什么情况?它仍然使用下拉列表中的第一个值,该值的顺序实际上与枚举中声明的顺序相同。是否可以替换@Html.EditorForModel()使用@Html.DropDownListFor并重试。@JoeHigley,我想这与您的投影/不同的执行有关。尝试将大小集合从IEnumerable项转换为列表项。您可以使用ToList()扩展名。让我知道你在做了这个改变后得到了什么价值。就是这样。如果我将
Html.DropDownList(“Size”,items)
替换为
Html.DropDownList(“,items)”
,它也可以工作。非常感谢你的帮助!
public class Options
{
    public enum Sizes
    {
        Small,
        Medium,
        Large
    };
}
@model = ProjectName.Models.Ball

<form asp-action="Create" asp-controller="Ball">
    @Html.EditorForModel()
    <input type="submit" value="submit">
</form>
public class Ball
{
    [Key]
    public Nullable<int> ID { get; set; }

    public string Name { get; set; }

    public Options.Sizes Size { get; set; }
}
@Html.DropDownListFor(m => m, items)