0

I am followed the answers in:

MVC6 Dropdownlist of Countries

but to no avail.

It seems to be proving difficult to render a drop down list in a view, when the view model is of type IEnumerable.

I am trying to get a drop down list of ClassName to appear on my BookClass view, using a view model:

    public class MemberClassViewModel
{
    [Required]
    public int MemberID { get; set; }

    [Required]
    public int ClassID { get; set; }

    public SelectList ClassName { get; set; }

    public List<Member> MemberClassBookings { get; set; }



}

I am using SelectList for the Class Name (exercise class name this is - i am building an application that can be used in Gyms).

   [HttpGet]
public async Task<IActionResult> BookClass(int id)
{

    List<MemberClassViewModel> memberClassViewModel = new List<MemberClassViewModel>();
    var classlist = _context.Classes.OrderBy(c=>c.ClassName).Select(x => new { Id = x.Id, Value = x.ClassName });
    var listData = await (from Classes in _context.Classes
                          select new
                          {
                              Classes.Id,
                              Classes.ClassName,
                              Classes.MemberClassBookings
                          }
                          ).ToListAsync();

    listData.ForEach(x =>
    {
        MemberClassViewModel Obj = new MemberClassViewModel();
        Obj.MemberID = id;
        Obj.ClassID = x.Id;

        Obj.MemberClassBookings = x.MemberClassBookings;

        Obj.ClassName = new Microsoft.AspNetCore.Mvc.Rendering.SelectList(classlist, "Id", "Value");
        memberClassViewModel.Add(Obj);

    }
   );

   return View(memberClassViewModel);

}

Here is my action method. As you can see I am adding the ClassName to the instance of the viewmodel, whilst rendering the dropdown list.

However in my view, I can't seem to access my drop down list:

@model IEnumerable<GymTracker.ViewModel.MemberClassViewModel>



@{
    ViewData["Title"] = "BookClass";
}

<h2>Book Class</h2>




<div class="form-group">
    <label asp-for="ClassName" class="col-md-2 control-label"></label>
    <div class="col-md-10">
        <select asp-for="Classname" asp-items="@Model"></select>
    </div>
</div>

Any help will be much appreciated. Thank you

Metzer
  • 211
  • 1
  • 6
  • 20
  • If you want to use `IEnumerable<..>` inside View then why are you composing `SelectList` inside controller? Did you try changing `@model` declaration inside view to use `SelectList` instead? – Siva Gopal Jun 11 '18 at 09:29
  • Sorry I'm not sure if I follow entirely. Do you mean that I should declare the model of type SelectList? So sometihng like @model SelectList – Metzer Jun 11 '18 at 09:37
  • Yes, that's what I mean. – Siva Gopal Jun 11 '18 at 10:55

0 Answers0