Asp.net core Enum DropDownList始终返回列表中的第一个值
我已经为我正在使用的一些枚举创建了几个EditorTemplate,以便在使用EditorForModel()时,它们将显示为DropDownList。但是,当我从列表中选择一个项目后提交表单时,它总是提交下拉列表中的第一个项目,而不是所选的项目 例如,如果我有一个名为“size”的枚举,它的值为“Small”、“Medium”和“Large”。EditorForModel将创建一个下拉列表,按“小”、“中”、“大”的顺序显示它们。如果我选择“大”,然后查看数据库中模型条目的详细信息,它会说“小”,这是不正确的 下面是我所拥有的一些示例代码: size.cshtml(编辑器模板) 创建.cshtml(视图)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将创建一个下拉列表,按“小”、“中”、“大”的顺序显示它们。如果我选择“大”,然后查看数据库中模型条目的详细信息,它会说“小
@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)