将选定值从EnumDropDownListFor传递给Controller - MVC 5

时间:2015-03-24 18:23:07

标签: asp.net-mvc model-view-controller enums selectlist dropdownlistfor

如何将@ Html.EnumDropDownListFor中的选定值传递给我的控制器? 实际上我并不想将所选值作为字符串传递,但我想在所选项目的枚举类中传递相应的数字。

我在下面的类(Controller和View)中对我的代码进行了评论。

枚举

    public enum Leerjaar
{
    [Display(Name="Eerste leerjaar")]
    eerste = 1,
    [Display(Name = "Tweede leerjaar")]
    tweede = 2,
    [Display(Name = "Derde leerjaar")]
    derde = 3,
    [Display(Name = "Vierde leerjaar")]
    vierde = 4,
    [Display(Name = "Vijfde leerjaar")]
    vijfde = 5,
    [Display(Name = "Zesde leerjaar")]
    zesde = 6
}

视图模型

      public class GraadIndexViewModel
{
    public Leerjaar leerjaar { get; set; }
    public GraadIndexViewModel(Leerjaar leerjaar){
        this.leerjaar = leerjaar;
    }
}

控制器

    public class GraadController : Controller
{

    public ActionResult Index()
    {
        //Passing the Enum to my ViewModel
        return View(new GraadIndexViewModel(new Leerjaar()));
    }

    [HttpPost]
    //And here I want to receive the selected value from the enumdropdown
    //in order to set my 'Leerjaar' field. 
    public ActionResult Index(GraadIndexViewModel g)
    {
        Leerjaar leerjaar = ???

    }
}

查看

    @using (Html.BeginForm()) 
    {
@Html.AntiForgeryToken()

<div class="form-horizontal">
    <h4>Kies uw leerjaar</h4>
    <hr />
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })

    @*Should I add something like new {leerjaarID = ???} here ?*@
    @Html.EnumDropDownListFor(model => model.leerjaar, "Kies uw leerjaar")

    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Ga verder" class="btn btn-default" />
        </div>
    </div>
</div>

1 个答案:

答案 0 :(得分:1)

当您使用html.SomethingFor( m => m.Property )帮助程序时,该字段绑定到该模型的属性,并在ASP.NET MVC处理POST提交时由模型绑定程序设置:

[HttpPost]
public ActionResult Index(GraadIndexViewModel g)
{
    Leerjaar leerjaar = g.leerjaar;
}

要获取枚举值的数值,只需转换为int(或枚举的支持类型):

[HttpPost]
public ActionResult Index(GraadIndexViewModel g)
{
    Int32 leerjaarInt = (Int32)g.leerjaar;
}