EditorForModel()を使用するとDropDownListsとして表示されるように、使用している列挙型に対していくつかのEditorTemplatesを作成しました。しかし、リストから項目を選択してフォームを送信すると、選択した項目の代わりに常に最初の項目がドロップダウンに表示されます。私が持っている場合列挙型DropDownListは常にリストの最初の値を返します
は例えば、列挙型は「サイズ」と呼ばれ、それが値「小」、「中」、および「大」を持っています。 EditorForModelは、「小」,「中」,「大」の順に表示するドロップダウンを作成します。 「大きい」を選択し、データベースに作成されたモデルエントリの詳細を確認すると、「小」となります。ここで
は、私が持っているもののいくつかのサンプルコードです:
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; }
}
は、どういうわけか、ボールのサイズプロパティは、常に、'小'あるドロップダウン、の最初の値です。私が何を選んだとしても。
選択した値を設定して送信しないとどうなりますか? –
これは、実際には列挙型で宣言されているのと同じ順序でドロップダウンの最初の値を使用します。 –
@ Html.EditorForModel()を@Html.DropDownListForに置き換えて試してみてください。 –