首页 > 解决方案 > 在 ASP.NET MVC 视图的详细信息视图中的一列中显示具有类别名称的表,在第二列中显示属于类别的项目列表以及链接

问题描述

我是我的 ASP.NET MVC Core 3.1 应用程序,我有存储职业的模型,如下所示:

public partial class Professions
{
    public int ProfessionID { get; set; }
    public int? ProfessionGroupID { get; set; }
    public string ProfessionTitle { get; set; }
    public string ProfessionDescription { get; set; }
}

所以每个职业都属于某个职业组,因此职业组的模型如下所示:

public partial class ProfessionGroups
{
    public ProfessionGroups()
    {
        Professions = new HashSet<Professions>();
    }

    public int ProfessionGroupID { get; set; }
    public int ProfessionGroupTitle { get; set; }
    public string ProfessionGroupDescription { get; set; }

    public virtual ICollection<Professions> Professions { get; set; }
}

如何在一个列中显示职业组列表,在另一列中显示职业列表以及指向每个职业Details视图的链接?这是某些输出表的View外观:

到目前为止,我已经创建了假设保存所需数据的 ViewModel:

public class ProfGroupsVM
{
    public int ProfessionGroupID { get; set; }
    public string ProfessionGroupTitle { get; set; }
    public List<int> ProfIDs { get; set; } = new List<int>();
    public List<string> ProfTitles { get; set; } = new List<string>();

}   

对于每一个ProfessionGroupID,它都必须填写ProfIDs属于该组的职业列表,并且ProfTitles应该持有职业头衔。

所以到目前为止,在控制器中我有:

   var profGroupsVM= new ProfGroupsVM();

   var result = from p in _context.Professions
        group p.ProfessionID by p.ProfessionGroupID into g
                select new  { ProfessionGroupID = g.Key, ProfessionIDs= g.ToList() };

我不知道如何将此结果分配给我,ViewModel也不知道如何显示所需View的 .

标签: c#asp.net-coreasp.net-core-mvc

解决方案


最好将ProfGroupsVM模型更改为:

public class ProfGroupsVM
    {
        public int ProfessionGroupID { get; set; }
        public string ProfessionGroupTitle { get; set; }
        public List<ProfInfo> Professions { get; set; }

        public class ProfInfo
        {
            public int Id { get; set; }

            public string Title { get; set; }
        }
    }

要获取信息,请使用以下命令:

   _dbContext.ProfessionGroups.Include(x => x.Professions)
              .Select(x => new ProfGroupsVM()
              {
                  ProfessionGroupID = x.ProfessionGroupID,
                  ProfessionGroupTitle = x.ProfessionGroupTitle,
                  Professions = x.Professions.Select(p => new ProfGroupsVM.ProfInfo
                  {
                      Id = p.ProfessionID,
                      Title = p.ProfessionTitle
                  }).ToList()
              }).ToList();

在你看来,试试这个来显示信息(我不擅长 UI :)):

@model List<ProfGroupsVM>

 <div>
  <ul>
      @foreach (var group in Model)
      {
        <li>@group.ProfessionGroupTitle</li>
        <ul>
            @foreach (var profession in group.Professions)
            {
                <li><a href="@profession.Id">@profession.Title</a></li>
            }
        </ul>

       }
   </ul>

或者,如果你坚持你ViewModelul部分,你可以这样说:

<ul>
@foreach (var idsTitles in item.ProfIDs.Zip(@item.ProfTitles, Tuple.Create)) 
{
<li><a asp-action="Details" asp-controller="Profession" asp-route-id="@idsTitles.Item1">@idsTitles.Item2</a></li>
}
</ul>

推荐阅读