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
が認識されず、エラーとして表示されることです。
誰もこれを解決する方法を知っていますか?
GenderType
は、列挙型ではなく、プロパティ名です。 GetEnumSelectListメソッドは、モデルのプロパティの名前ではなく、列挙型を指定することを想定しています。
これを試して:
Html.GetEnumSelectList<Gender>()
GenderType
の代わりにGender
を誤って使用したと思います。正しい構文は
<select asp-for="GenderType" asp-items="Html.GetEnumSelectList<Gender>()">
<option selected="selected" value="">Please select</option>
</select>
単純にRazor構文を使用できます。
@Html.DropDownList("StudentGender",
Html.GetEnumSelectList<Gender>(),
"Select Gender",new { @class = "form-control" })
私は同じ問題を抱え、解決策を探して頭を燃やしました!
この状況を解決して、次のようにビューの上にモデルをインスタンス化できます。
@using CRM.Model;
YourSolution.Modelを使用
はい、奇妙に聞こえますが、私を信じて、うまくいきます!私の投稿で私の答えを見てください。
genderTypeの代わりにGenderをasp-items = "Html.GetEnumSelectList -GenderType-()"に使用します
asp-items = "Html.GetEnumSelectList -Gender-()"など
以下は私のために働いたものでした。列挙型自体は、モデルとして使用しているクラスのスコープの下で宣言されたクラスであるため、これが必要です。
<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
}
}