Проверка значения bool для ViewBag в MVC - PullRequest
0 голосов
/ 19 марта 2020

У меня есть метод контроллера, который создает ViewBag, подобный этому

  foreach (Site s in sites)
            {              
                var OffReportRows = new Queue<List<string>>();
                ViewBag.showColumns = false;
                if (osiTotal[s.ID] > 0) {
                ViewBag.showColumns = true;

                OffReportRows.Enqueue(new List<string>
                {
                    "Parts",
                    "",
                    "",
                    osiPartCost[s.ID].ToString("C2"),
                    "",
                    "",
                    osiPartCost[s.ID].ToString("C2")
                });
             }

И страница просмотра, которая проверяет, является ли значение ViewBag истинным

    @foreach (Site s in sites)
        {
            if( ViewBag.showColumns == true) {
            <tr>
                <td style="font-weight : bold;">@s.Name</td>
                <td></td>
                <td></td>
                <td style="font-weight : bold;">Average Cost</td>
                <td></td>
                <td></td>
                <td style="font-weight : bold;">Average Cost With Labour</td>
            </tr>
             }

Но он по-прежнему всегда возвращает столбцы, даже если общее число равно 0. Как это исправить?

1 Ответ

0 голосов
/ 20 марта 2020

Здравствуйте, согласно вашей проблеме, что я понял, и в соответствии с вашими требованиями. Я предлагаю вам упомянуть ниже вещи

Создайте модель представления, как упомянуто ниже

public class siteViewModel
{
   public int SiteId {get;set;}
   public Bool ShowColumn {get;set;}
}

Создайте список и установите сопоставление с идентификатором сайта и добавьте объект в список, как показано ниже в вашем контроллер.

List<siteViewModel> siteData = new List<siteViewModel>();
foreach (Site s in sites)
{
    var OffReportRows = new Queue<List<string>>();
    if (osiTotal[s.ID] > 0)
    {
         // your OffReportRows related code here
         siteData.Add(new siteViewModel() {SiteId =s.ID,ShowColumn =true });
    }
    else
    {
         siteData.Add(new siteViewModel() {SiteId =s.ID,ShowColumn =false });
    }
}
viewbag.MapData = siteData;

AT Вид сбоку, внести следующие изменения

@{
     List<siteViewModel> data = (List<siteViewModel>)viewbag.MapData;
}

@foreach (Site s in sites)
{
    if(data.Any(a=> a.SiteId==s.ID && a.ShowColumn)) 
    {
      <tr>
            <td style="font-weight : bold;">@s.Name</td>
             // add you fields as per requirements
      </tr>
    }
    else
    {
       // do as per requirements
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...