首页 > 解决方案 > 使用 IEnumerable ViewModel 在 MVC Razor 视图中呈现下拉列表

问题描述

我遵循以下答案:

MVC6 国家下拉列表

但无济于事。

当视图模型的类型为 IEnumerable 时,似乎很难在视图中呈现下拉列表。

我正在尝试使用视图模型让 ClassName 的下拉列表出现在我的 BookClass 视图中:

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



}

我正在使用 SelectList 作为类名(这是练习类名 - 我正在构建一个可以在健身房使用的应用程序)。

   [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);

}

这是我的操作方法。如您所见,我将 ClassName 添加到视图模型的实例中,同时呈现下拉列表。

但是在我看来,我似乎无法访问我的下拉列表:

@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>

任何帮助都感激不尽。谢谢

标签: c#razordrop-down-menuasp.net-core-mvcasp.net-mvc-viewmodel

解决方案


推荐阅读