【问题标题】:Pass selected value from EnumDropDownListFor to Controller - MVC 5将 EnumDropDownListFor 中的选定值传递给控制器​​ - MVC 5
【发布时间】:2015-03-24 18:23:07
【问题描述】:

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

我在下面的类(控制器和视图)中注释了我的代码。

枚举

    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>

【问题讨论】:

  • 从 ViewModel 类中移除构造函数。

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


【解决方案1】:

当您使用 html.SomethingFor( m =&gt; 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;
}

【讨论】:

  • 好的,谢谢,我怎样才能得到我给枚举类中每个值的数字?因为我找不到类似的东西: int nr = g.leerjaar.getNumber()
  • @user3609750 我已经修改了答案
猜你喜欢
  • 2019-03-24
  • 1970-01-01
  • 2021-11-12
  • 1970-01-01
  • 2011-09-25
  • 1970-01-01
  • 1970-01-01
  • 2012-12-31
  • 2020-10-22
相关资源
最近更新 更多