bugfix> asp.net > 投稿
public class MyViewModel
{
    [Required]
    public MyEnum MyEnum { get; set; }
}
public enum MyEnum
{
    First,
    Second
}

それから私の見解では..

<form action="/Go/Here" method="post">
    <select asp-for="MyEnum" asp-items="Html.GetEnumSelectList<MyEnum>()">
    <option selected="selected" value="">Please Select..</option>
    </select>
<button type="submit" value="Submit">Submit</button>

私は、最初の値をデフォルトにせずに選択を必要とする生成された列挙フォームを作成しようとしています。ただし、現在は Please Select.. の間に送信できますが選択され、dotnetが MyEnum.First と考えるが選択されます。デフォルトの列挙値を追加し、デフォルトの列挙値が選択されていないことを確認せずにこれを行うことは可能ですか?それはとてもハッキーだからです。

回答 1 件
  • 舞台裏では、列挙型は数字です。ページをレンダリングすると、「選択してください。」ではなく「最初」のオプションが選択されていることがわかります。これは、テキスト「First」を含むオプションの値が 0 であるためです。  0は int のデフォルト値です  タイプ。そのため、オプションとして「Please select」を指定してフォームを送信すると、「MyEnum」のフォームデータ項目は空/ nullになりますが、型はnullを許可しない型であるため、モデルバインダーは最初のenumオプションを設定します。

    タイプをヌル可能列挙型に変更する必要があります。

    public class MyViewModel
    {
        [Required]
        public MyEnum? MyEnum { get; set; }
    }
    
    

    ユーザーが「選択してください」を選択してフォームを送信すると、値は NULL になります  最初のenum(0)の代わりに

あなたの答え