Перебор всей таблицы создает проблему с отображением нескольких значений для одного элемента

У меня небольшая проблема с динамическим добавлением данных в HTML из таблицы SQL.

это моя петля

@foreach (var item in Model.ModulesSubStages)
{
    <div class = "row">
        <div class = "col-md-6"><a id = "courseRedirect" asp-page = "/Site/Courses/@item.ModuleId/@item.Id" class = "w3-bar-item w3-button"> @item.StageName </a></div>
        <div class = "col-md-6">
            @foreach (var monit in Model.ProgressMonitor)
            {
                if (monit.UserId == Model._User.Id && item.Id == monit.CourseSubStageId)
                {
                    <i class = "bi bi-check-circle-fill" id = "@item.Id" style = "color:green;"></i>
                }
                else if (monit.UserId == Model._User.Id && item.Id != monit.CourseSubStageId)
                {
                    <i class = "bi bi-check-circle-fill" id = "@item.Id" style = "color:gray;"></i>
                }
                else
                {
                    <i class = "bi bi-check-circle-fill" id = "@item.Id" style = "color:gray;"></i>
                }
            }
        </div>
    </div>
}

ModulesSubStages = 9 элементов

ProgressMonitor - таблица, когда я вставляю данные после выполнения какого-либо действия

Проблема:

Результат этого цикла:

Я хочу перебрать всю таблицу и пометить зеленым, если она завершена, иначе серым, я не хочу печатать в html несколько значений на 1 запись.

-- ОБНОВИТЬ

это структура таблицы ProgressMonitor:

SELECT [Id]
      ,[CourseId]
      ,[CourseStageId]
      ,[CourseSubStageId]
      ,[UserId]
  FROM [ProgressMonitor];

Нет смысла проводить различие между двумя случаями только для того, чтобы сделать то же самое в обоих случаях (else if и else).

Olivier Jacot-Descombes 20.11.2022 17:08

да я удалил еще и ничего не произошло!

Software Architect 20.11.2022 17:14
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
116
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Измените свои коды, как показано ниже;

@foreach (var item in Model.ModulesSubStages){
  <div class = "row">
  <div class = "col-md-6"><a id = "courseRedirect" asp-page = "/Site/Courses/@item.ModuleId/@item.Id" class = "w3-bar-item w3-button"> @item.StageName </a></div>
  <div class = "col-md-6">
    @foreach (var monit in Model.ProgressMonitor)
    {
        if (monit.UserId == Model._User.Id )
        {
         if (item.Id == monit.CourseSubStageId )
           {
            <i class = "bi bi-check-circle-fill" id = "@item.Id" style = "color:green;"></i>
           {
              break;
             }
           }
         else if (item.Id != monit.CourseSubStageId )
            {
            <i class = "bi bi-check-circle-fill" id = "@item.Id" style = "color:gray;"></i>
             {
              break;
             }
            }
        }
        
    }
   </div>
  </div>
}

Привет, после удаления этого ничего не происходит. Если я изменю это: else if (monit.UserId == Model._User.Id) { <i class = "bi bi-check-circle-fill" id = "@item.Id" style = "color:gray;display :none;"></i> } я вижу только зеленый цвет, но если 8/9 элементов выполнены, 9 не помечаются как серые :) imgur.com/tmjIEOV

Software Architect 20.11.2022 17:10

во-первых, вы foreach все элементы для рисования html, затем вы foreach все элементы для статуса чтения. может вы не корректно сравниваете? Вы можете поделиться данными json? если возможно

Роман Зыков 20.11.2022 17:15

Данных json нет, это данные из таблицы SQL, как я упоминал в первом посте. Это структура таблицы: SELECT [Id], [CourseId], [CourseStageId], [CourseSubStageId], [UserId] FROM [ProgressMonitor];

Software Architect 20.11.2022 17:16

@SoftwareArchitect Я обновляю свое решение. Используй это.

cancan 20.11.2022 17:19

@cancan все тот же результат:/ показаны все разметки

Software Architect 20.11.2022 17:21

@SoftwareArchitect Я обновляю блок else. Попробуйте и вы, пожалуйста.

cancan 20.11.2022 17:28

@cancan imgur.com/Kx5t4Iz - первые 9 элементов - это старый цикл, вторые 9 элементов - ваш цикл. Не знаю, почему это показывает ложный результат: D

Software Architect 20.11.2022 17:35

Жарко будет?

cancan 20.11.2022 17:39

Давайте продолжим обсуждение в чате.

Software Architect 20.11.2022 17:45
Ответ принят как подходящий

Вам не нужно использовать вторую петлю!

вы просто используете предложение where вместо этого

@foreach (var item in Model.ModulesSubStages)
{
<div class = "row">
    <div class = "col-md-6"><a id = "courseRedirect" asp-page = "/Site/Courses/@item.ModuleId/@item.Id" class = "w3-bar-item w3-button"> @item.StageName </a></div>
    <div class = "col-md-6">
        @if (Model.ProgressMonitor.Any(a => a.UserId = Model._User.Id && item.Id == a.CourseSubStageId))
        {
            <i class = "bi bi-check-circle-fill" id = "@item.Id" style = "color:green;"></i>
        }
        else
        {
            <i class = "bi bi-check-circle-fill" id = "@item.Id" style = "color:gray;"></i>
        }
    </div>
</div>
}

Другие вопросы по теме