0

Как передать выбранное значение из @ Html.EnumDropDownListДля моего контроллера? И на самом деле я не хочу передавать выбранное значение в виде строки, но я хочу передать соответствующее число в классе enum из выбранного элемента.Передача выбранного значения из EnumDropDownListFor для контроллера - MVC 5

Я прокомментировал свой код в классах (контроллер и представление) ниже.

Enum

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 
} 

ViewModel

 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

Удалить конструктор из вашего класса ViewModel. – Dai

ответ

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; 
} 
+0

Хорошо спасибо и как я могу получить номер, который я дал каждому значению в классе enum? Потому что я не могу найти что-то вроде: int nr = g.leerjaar.getNumber() – newbiedevelopper

+0

@ user3609750 Я пересмотрел свой ответ – Dai

+0

спасибо, что это сработало! – newbiedevelopper