我为我正在使用的一些枚举创建了几个 EditorTemplates,以便在我使用 EditorForModel() 时它们将显示为 DropDownLists。但是,当我从列表中选择一个项目后提交表单时,它总是提交下拉列表中的第一个项目而不是选定的项目。
例如,如果我有一个名为"Sizes"的枚举,它的值是 'Small'、'Medium'和'Large'。EditorForModel 将创建一个下拉菜单,以'Small'、'Medium'、'Large'的顺序显示它们。如果我然后选择“大”,然后查看已进入数据库的模型条目的详细信息,它将显示“小”,这是不正确的。
这是我所拥有的一些示例代码:
Sizes.cshtml(编辑器模板)
@model Options.Sizes
@{
var values = Enum.GetValues(typeof(Options.Sizes)).Cast<Options.Sizes>();
IEnumerable<SelectListItem> items =
from value in values
select new SelectListItem
{
Text = value.ToString(),
Value = value.ToString(),
Selected = (value.Equals(Options.Sizes.Small))
};
}
@Html.DropDownList("Size", items)
Options.cs(保存枚举的类)
public class Options
{
public enum Sizes
{
Small,
Medium,
Large
};
}
创建.cshtml(查看)
@model = ProjectName.Models.Ball
<form asp-action="Create" asp-controller="Ball">
@Html.EditorForModel()
<input type="submit" value="submit">
</form>
Ball.cs (模型)
public class Ball
{
[Key]
public Nullable<int> ID { get; set; }
public string Name { get; set; }
public Options.Sizes Size { get; set; }
}
不知何故, Ball 的 Size 属性始终是下拉列表中的第一个值,即'Small'。不管我选什么。