c# - 在 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
的 .
解决方案
最好将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>
或者,如果你坚持你ViewModel
的ul
部分,你可以这样说:
<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>
推荐阅读
- kubernetes - 最先进的作业调度(容器、混合云)?
- javascript - 如何防止 emojionearea 内容中的 SQL 注入?
- java - java.sql.SQLSyntaxErrorException:表/视图'SEQUENCE'不存在
- django - Django 2.2+调用rest api,过滤id列表
- swift - 3字节的unicode字符可以自动转换成ascii吗
- python - 如何计算我的 django 网站上静态文件的下载次数?
- python - 获取访问令牌后如何读取用户的谷歌日历事件?
- html - 创建一个带有十字的 div 和一个带有 CSS 的文本
- reactjs - 如何以编程方式从父组件中清除选定的复选框
- c# - 如何通过给出 id 列表从列表中查询对象