Asp.net-Mvc-5.1

如何在 EnumDropDownListFor 中設置選定的值?

  • September 4, 2021

我正在使用 MVC 5.2.0,我正在嘗試使用新的Html.EnumDropDownListFor. 這就是我設置值的方式:

//Model
public class MyModel {
   public int SelectedEnumId { get; set; }
   public TestEnum MyEnum { get; set; }
}

//Enum
public enum TestEnum : int
{
   name1 = 1,
   name2 = 2
}

//View
@Html.EnumDropDownListFor(model => model.MyEnum,new { @class = "form-control" })

這是有效的,並且正在顯示值。但是如何設置選定的值(SelectedEnumId)?

通常我會使用

//Not enum
@Html.DropDownListFor(model => model.SelectedId, new SelectList(Model.myvalues, "Value", "Text"))

有沒有辦法用 MVC 5.1-5.2 中的新助手來做到這一點?或者我必須為此創建一個擴展方法?

據我所知,只需確保在呼叫之前在模型中設置了要選擇的值

//Controller:
...
myModel.TestEnum = TestEnum.name2;
...

//On your view
...
@Html.EnumDropDownListFor(model => model.TestEnum);
...

也無法讓控制器中選擇的選項顯示在前端,因此不得不求助於設置一個臨時隱藏輸入並使用 jQuery 在客戶端進行更新:

<div class="form-group">
@Html.LabelFor(model => model.MyEnum, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
   @Html.EnumDropDownListFor(model => model.MyEnum, "Select name", new { @class = "form-control" })
   @Html.ValidationMessageFor(model => model.MyEnum, "", new { @class = "text-danger" })
</div>
@Html.Hidden("MyEnumTemp", (int)Model.MyEnum)
<script>
   $(function () {
       $("#MyEnum").val($("#MyEnumTemp").val());
   });
</script>

引用自:https://stackoverflow.com/questions/24770756