c# - 检索主要类别下的子类别列表并将其传递给视图
问题描述
大家晚上好。首先我在做一个电子学习项目。到问题。
我有一个Course
类IEnumerable<Modules>
和一个Module
类IEnumerable<Topics>
。当前,当用户单击视图上的任何课程时,它会打开一个CourseDetail
视图。此视图旨在向用户显示详细信息。Course
像所有模块一样,当单击模块时,我希望下拉每个模块下的所有主题。
这是我发现它真的很困难的地方。我可以检索Modules
课程的所有内容,但我发现很难ToList()
为每个模块提供所有主题。因此,当用户单击模块时,它会打开一个列出所有主题的内部 div。
[AllowAnonymous]
public async Task<IActionResult> CourseDetail(int id)
{
var course = _context.Courses.FirstOrDefault(c => c.CourseId == id);
var courseId = course.CourseId;
var video = _context.Topic.Include(m => m.Modules).Where(m => m.Modules.CourseId == courseId).Sum(m => m.Duration);
float totalSeconds = video;
TimeSpan time = TimeSpan.FromSeconds(totalSeconds);
var duration = time.ToString("hh':'mm':'ss"); // 00:03:48
var moduleCount = _context.Modules.Where(c => c.CourseId == courseId).Count();
var courseModules = await _context.Modules.Where(c => c.CourseId == courseId).ToListAsync();
foreach (var module in courseModules)
{
var moduleId = module.ModuleId;
var moduleTopics = _context.Topic.Where(c => c.ModuleId == moduleId).ToList();
ViewBag.moduleTopics = moduleTopics;
}
return View(course);
}
这就是我所做的。我的观点看起来像这样
<div id="accordion_lessons" role="tablist" class="add_bottom_45">
@foreach (var module in ViewBag.Modules)
{
<div class="card">
<div class="card-header" role="tab" id="headingOne_@module.ModuleId">
<h5 class="mb-0">
<a data-toggle="collapse" href="#collapseOne_@module.ModuleId" aria-expanded="true" aria-controls="collapseOne"><i class="indicator ti-minus"></i>@Html.Raw(module.Title)</a>
</h5>
</div>
<div id="collapseOne_@module.ModuleId" class="collapse show" role="tabpanel" aria-labelledby="headingOne" data-parent="#accordion_lessons">
<div class="card-body">
<div class="list_lessons">
<ul>
@foreach (var topic in ViewBag.moduleTopics)
{
<li><a href="#" class="video">@topic.Title</a><span>@topic.Duration</span></li>
}
</ul>
</div>
</div>
</div>
</div>
}
</div>
我意识到Viewbag.ModuleTopics
唯一保存最后一个项目的主题列表,即Module
我通过foreach
语句循环遍历的主题列表,我怎么可能实现列出课程模块,点击任何模块时,它会显示一个列出主题的内部 div。谢谢
解决方案
您可以在 ViewBag 中存储所有主题的列表,并在视图中使用它来显示每门课程的主题。
[AllowAnonymous]
public async Task<IActionResult> CourseDetail(int id)
{
var course = _context.Courses.FirstOrDefault(c => c.CourseId == id);
var courseId = course.CourseId;
var video = _context.Topic.Include(m => m.Modules).Where(m => m.Modules.CourseId == courseId).Sum(m => m.Duration);
float totalSeconds = video;
TimeSpan time = TimeSpan.FromSeconds(totalSeconds);
var duration = time.ToString("hh':'mm':'ss"); // 00:03:48
var moduleCount = _context.Modules.Where(c => c.CourseId == courseId).Count();
ViewBag.Topics= _context.Topic.ToList();
return View(course);
}
并且在视图中..
<div id="accordion_lessons" role="tablist" class="add_bottom_45">
@foreach(var module in ViewBag.Modules)
{
<div class="card">
<div class="card-header" role="tab" id="headingOne_@module.ModuleId">
<h5 class="mb-0">
<a data-toggle="collapse" href="#collapseOne_@module.ModuleId" aria-expanded="true" aria-controls="collapseOne"><i class="indicator ti-minus"></i>@Html.Raw(module.Title)</a>
</h5>
</div>
<div id="collapseOne_@module.ModuleId" class="collapse show" role="tabpanel" aria-labelledby="headingOne" data-parent="#accordion_lessons">
<div class="card-body">
<div class="list_lessons">
<ul>
@var topicsForCurrentModule = ViewBag.Topics.Where(c => c.ModuleId == module.ModuleId)
@foreach (var topic in topicsForCurrentModule)
{
<li><a href="#" class="video">@topic.Title</a><span>@topic.Duration</span></li>
}
</ul>
</div>
</div>
</div>
</div>
}
推荐阅读
- java - 如何在回收站视图中显示更新和加载的文本?
- java - 我应该在 Builder Pattern 中使用原始数据类型还是包装数据类型
- ruby-on-rails - 用户中的 NoMethodError #显示用户的未定义方法“以下”
- html - 在背景图像上放置不可见链接
- azure-cosmosdb - cosmosdb 上的唯一稀疏索引不起作用
- html - 根据内容/标签优化按钮宽度
- powershell - 将字符串拆分为两个数组
- svg - 如何给三角形的两条边上色?
- jquery - 反应(cra):当尝试在 fullcalendar 的“eventRender”中使用 jQuery 时,我收到错误:$el.popover 不是函数
- erlang - 以记录为键的映射 - 如何检查 Erlang 中是否存在键