dlnzki Ответов: 1

Как раскрасить колонну в соответствии с ее заданным состоянием?


Привет. у меня есть имя первой страницы"Homepage.cshtml", вторая страница "UnitDetails.cshtml". Моя модель называется "DetailBundle", а контроллер - "Home"

мои табличные базы данных-это таблицы "тестер" и "параметр", где внешний ключ - "ParameterID"

на главной странице у меня есть таблица, которая отображает все имена тестеров (из db.tester). и если я нажму на имя тестера, он направится к UnitDetails и принесет данные TesterID. В базе данных я должен указать каждое имя тестера с его условием, хорошо ли оно/плохо. (обратите внимание, что good/bad находится в db.Parameter)

поэтому я хочу, чтобы мой стол был окрашен в соответствии с хорошим:зеленым и плохим:красным.

я попытался использовать запрос, но когда я запускаю его, состояние exeption остается необработанным.

Что я уже пробовал:

это мой контроллер:

public ActionResult Homepage()
       {
           List<DetailBundle> query = (from i in db.Testers
                        from a in db.Parameters
                        .Where(a => a.ParameterID == i.ParameterID)

                        select new DetailBundle
                        {
                            TesterID = i.TesterID,
                            TesterName = i.TesterName,
                            Param_desc = a.Param_desc

                        }).Distinct().OrderBy(i => i.TesterID).ToList();
           ViewBag.TesterUnit = query;
           return View();
       }


это моя домашняя страница:
@if (Tester.Contains(ViewBag.TesterUnit[i].TesterName))
                    {
                        if (ViewBag.TesterUnit[i].Param_desc == "Good")
                        {
                            <td class="custom" style="text-align:center; color:red">
                                @Html.ActionLink((string)ViewBag.TesterUnit[i].TesterName, "UnitDetails", new { id = (object)ViewBag.TesterUnit[i].TesterID }, new { target = "_blank" })
                            </td>
                        }
                        else if (ViewBag.TesterUnit[i].Param_desc == "Bad")
                        {
                            <td class="custom" style="text-align:center; color:green">
                                @Html.ActionLink((string)ViewBag.TesterUnit[i].TesterName, "UnitDetails", new { id = (object)ViewBag.TesterUnit[i].TesterID }, new { target = "_blank" })
                            </td>
                        }
                        else
                        {
                            <td class="custom" style="text-align:center; color:white">
                                @Html.ActionLink((string)ViewBag.TesterUnit[i].TesterName, "UnitDetails", new { id = (object)ViewBag.TesterUnit[i].TesterID }, new { target = "_blank" })
                            </td>
                        }
                        i++;

                        if (Tester.Contains(ViewBag.TesterUnit[i].TesterName))   //display only if it is in Desktop List.
                        {
                            if (ViewBag.TesterUnit[i].Param_desc == "Good")
                            {
                                <td class="custom" style="text-align:center; color:red">
                                    @Html.ActionLink((string)ViewBag.TesterUnit[i].TesterName, "UnitDetails", new { id = (object)ViewBag.TesterUnit[i].TesterID }, new { target = "_blank" })
                                </td>
                            }
                            else if (ViewBag.TesterUnit[i].Param_desc == "Bad")
                            {
                                <td class="custom" style="text-align:center; color:green">
                                    @Html.ActionLink((string)ViewBag.TesterUnit[i].TesterName, "UnitDetails", new { id = (object)ViewBag.TesterUnit[i].TesterID }, new { target = "_blank" })
                                </td>
                            }
                            else
                            {
                                <td class="custom" style="text-align:center; color:white">
                                    @Html.ActionLink((string)ViewBag.TesterUnit[i].TesterName, "UnitDetails", new { id = (object)ViewBag.TesterUnit[i].TesterID }, new { target = "_blank" })
                                </td>
                            }
                        }
                        i++;
                        if (Tester.Contains(ViewBag.TesterUnit[i].TesterName))   //display only if it is in Desktop List.
                        {
                            if (ViewBag.TesterUnit[i].Param_desc == "Good")
                            {
                                <td class="custom" style="text-align:center; color:red">
                                    @Html.ActionLink((string)ViewBag.TesterUnit[i].TesterName, "UnitDetails", new { id = (object)ViewBag.TesterUnit[i].TesterID }, new { target = "_blank" })
                                </td>
                            }
                            else if (ViewBag.TesterUnit[i].Param_desc == "Bad")
                            {
                                <td class="custom" style="text-align:center; color:green">
                                    @Html.ActionLink((string)ViewBag.TesterUnit[i].TesterName, "UnitDetails", new { id = (object)ViewBag.TesterUnit[i].TesterID }, new { target = "_blank" })
                                </td>
                            }
                            else
                            {
                                <td class="custom" style="text-align:center; color:white">
                                    @Html.ActionLink((string)ViewBag.TesterUnit[i].TesterName, "UnitDetails", new { id = (object)ViewBag.TesterUnit[i].TesterID }, new { target = "_blank" })
                                </td>
                            }
                        }
                    }

1 Ответов

Рейтинг:
10

Richard Deeming

Попробуйте что-нибудь вроде этого:

@for (int i = 0; i < ViewBag.TesterUnit.Count; i++)
{
    int recordsInRow = 3;
    
    <tr>
    @while (recordsInRow > 0 && i < ViewBag.TesterUnit.Count)
    {
        if (Tester.Contains(ViewBag.TesterUnit[i].TesterName))
        {
            recordsInRow--;
            
            string cssClass;
            switch (ViewBag.TesterUnit[i].Param_desc)
            {
                case "Good":
                    cssClass = "custom text-success";
                    break;
                case "Bad":
                    cssClass = "custom text-danger";
                    break;
                default:
                    cssClass = "custom text-light";
                    break;
            }
            
            <td class="@cssClass">
                @Html.ActionLink((string)ViewBag.TesterUnit[i].TesterName, "UnitDetails", new { id = (object)ViewBag.TesterUnit[i].TesterID }, new { target = "_blank" })
            </td>
        }
        
        i++;
    }
    </tr>
}
При этом используются служебные классы Bootstrap color: Цвета · Bootstrap v4.5[^]


dlnzki

одно и то же имя теста появляется в 3 столбцах одной строки. и цвет шрифта тоже не меняется. я подумал,что это, возможно, из-за HtmlLink, который я использовал, поэтому я изменил текст-успех на bg-успех. но все равно никакой разницы.

dlnzki

то же самое имя теста появляется в 3 столбцах 1 строки. цвет названия тестера также не меняется. я подумал, что, возможно, это из-за htmlLink, так как цвет по умолчанию-синий. поэтому я меняю текст-успех на БГ-успех. но ничего не происходит. пожалуйста помочь. спасибо

dlnzki

попытался прокомментировать в третий раз.
выходные данные одного и того же имени тестера отображаются в 3 столбцах одной и той же строки.