【问题标题】:Retrieving a List of Subcategory under a major Category and passing it to the View检索主要类别下的子类别列表并将其传递给视图
【发布时间】:2020-01-15 19:59:55
【问题描述】:

大家晚上好。首先我在做一个电子学习项目。到问题。

我有一个CourseClass 有IEnumerable<Modules> 和一个ModuleIEnumerable<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。谢谢

【问题讨论】:

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


【解决方案1】:

您可以在 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>
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多