如何在EnumDropDownListFor中设置选定的值?

时间:2014-07-16 01:24:23

标签: asp.net-mvc-5.1

我正在使用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中使用新的Helper来做到这一点?或者我必须为此创建一个Extension方法?

3 个答案:

答案 0 :(得分:22)

据我所知,确保在调用之前在模型中设置要选择的值

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

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

答案 1 :(得分:2)

无法在控制器中选择要在前端显示的选项,因此不得不求助于设置临时隐藏输入并在客户端使用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>

答案 2 :(得分:0)

只需在您的控制器中使用它,它就像一个饰物

MyModel.TestEnum = (TestEnum)SelectedEnumId;

否(假设SelectedEnumId> 0),这将很好地工作。

if(SelectedEnumId > 0) {
   MyModel.TestEnum = (TestEnum)SelectedEnumId;
}