web-dev-qa-db-ja.com

ASP.NET MVCコアのドロップダウンリストに列挙型を使用する

Razorビューのタグヘルパーを使用して、ASP.NET MVCコアのenumプロパティでドロップダウンリストを作成しようとしています。

モデルは次のとおりです。

public class PersonalMember : Member
{
    [Required, Display(Name = "First Name")]
    public string FirstName { get; set; }

    [Required, Display(Name = "Last Name")]
    public string LastName { get; set; }

    [EnumDataType(typeof(Gender))]
    public Gender GenderType { get; set; }
}

public enum Gender
{
    Male = 1,
    Female = 2
}

ビューのフォームの一部は次のとおりです。

<div class="form-group">
    <label asp-for="GenderType" class="col-md-2 control-label"></label>
    <div class="col-md-10">
        <select asp-for="GenderType" asp-items="Html.GetEnumSelectList<GenderType>()">
            <option selected="selected" value="">Please select</option>
        </select>
        <span asp-validation-for="GenderType" class="text-danger" />
    </div>
</div>

私が抱えている問題は、Html.GetEnumSelectListの後、GenderTypeが認識されず、エラーとして表示されることです。

誰もこれを解決する方法を知っていますか?

50
David Sharpe

GenderTypeは、列挙型ではなく、プロパティ名です。 GetEnumSelectListメソッドは、モデルのプロパティの名前ではなく、列挙型を指定することを想定しています。

これを試して:

Html.GetEnumSelectList<Gender>()
53
ADyson

GenderTypeの代わりにGenderを誤って使用したと思います。正しい構文は

<select asp-for="GenderType" asp-items="Html.GetEnumSelectList<Gender>()">
    <option selected="selected" value="">Please select</option>
</select>
51
Kostas

単純にRazor構文を使用できます。

@Html.DropDownList("StudentGender", 
    Html.GetEnumSelectList<Gender>(),
    "Select Gender",new { @class = "form-control" })
17
Faishal Ahammad

私は同じ問題を抱え、解決策を探して頭を燃やしました!

この状況を解決して、次のようにビューの上にモデルをインスタンス化できます。

@using CRM.Model;

YourSolution.Modelを使用

はい、奇妙に聞こえますが、私を信じて、うまくいきます!私の投稿で私の答えを見てください。

ASP.NET Core MVCでENUMタグヘルパーを選択

4
Rogerio Azevedo

genderTypeの代わりにGenderをasp-items = "Html.GetEnumSelectList -GenderType-()"に使用します

asp-items = "Html.GetEnumSelectList -Gender-()"など

1
Mehdi

以下は私のために働いたものでした。列挙型自体は、モデルとして使用しているクラスのスコープの下で宣言されたクラスであるため、これが必要です。

<select asp-for="Status" class="form-control" asp-items="@Html.GetEnumSelectList<Cart.CartStatus>()"></select>

参照用に私のモデルの下(作業中)

 public class Cart
    {
        public int CartId { get; set; }
        public List<Order> Orders { get; set; }
        [Required]
        public string UserId { get; set; }
        public DateTime DeliveryDate { get; set; }
        public CartStatus Status { get; set; }
        public enum CartStatus
        {
            Open = 1,
            Confirmed = 2,
            Shipped = 3,
            Received = 4
        }
    }
0
Daniel Paiva