我爲我使用的一些枚舉創建了幾個EditorTemplates,這樣當我使用EditorForModel()時它們將顯示爲DropDownLists。但是,當我從列表中選擇一個項目後提交表單時,它始終在下拉列表中提交第一個項目,而不是選定的項目。枚舉DropDownList總是返回列表中的第一個值
舉例來說,如果我有一個枚舉叫做「尺寸」它具有價值「小」,「中」和「大」。 EditorForModel將創建一個下拉框,以的順序顯示「小」,'中','大'。如果我然後選擇'Large',然後查看數據庫中的模型條目的詳細信息,則會顯示'Small'這是不正確的。
這裏是什麼,我有一些示例代碼:
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
};
}
Create.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; }
}
不知何故球的尺寸屬性始終在下拉列表中,這是'小'第一個值。不管我選什麼。
如果您未設置所選值並提交,會發生什麼情況? –
它仍然使用下拉列表中的第一個值,它們與enum –
中聲明的順序相同,您可以使用@ Html.DropDownListFor替換@ Html.EditorForModel()並嘗試。 –