У меня небольшая проблема с динамическим добавлением данных в 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];
да я удалил еще и ничего не произошло!
Измените свои коды, как показано ниже;
@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
во-первых, вы foreach все элементы для рисования html, затем вы foreach все элементы для статуса чтения. может вы не корректно сравниваете? Вы можете поделиться данными json? если возможно
Данных json нет, это данные из таблицы SQL, как я упоминал в первом посте. Это структура таблицы: SELECT [Id], [CourseId], [CourseStageId], [CourseSubStageId], [UserId] FROM [ProgressMonitor];
@SoftwareArchitect Я обновляю свое решение. Используй это.
@cancan все тот же результат:/ показаны все разметки
@SoftwareArchitect Я обновляю блок else. Попробуйте и вы, пожалуйста.
@cancan imgur.com/Kx5t4Iz - первые 9 элементов - это старый цикл, вторые 9 элементов - ваш цикл. Не знаю, почему это показывает ложный результат: D
Жарко будет?
Давайте продолжим обсуждение в чате.
Вам не нужно использовать вторую петлю!
вы просто используете предложение 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>
}
Нет смысла проводить различие между двумя случаями только для того, чтобы сделать то же самое в обоих случаях (
else if
иelse
).