Получение списка подкатегорий в основной категории и передача его в представление - PullRequest
0 голосов
/ 15 января 2020

добрый вечер всем. Сначала я работаю над проектом электронного обучения. к проблеме.

У меня есть класс 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 содержит только список топи c для последнего элемента ie Module, который я перебираю через foreach Скажите, пожалуйста, насколько возможно я могу составить список модулей курса, и по щелчку любого модуля он показывает внутренний блок, в котором перечислены темы. спасибо

1 Ответ

0 голосов
/ 16 января 2020

Вы можете сохранить список всех тем в 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>
    }
...