【问题标题】:Checking bool value of a ViewBag in MVC在 MVC 中检查 ViewBag 的布尔值
【发布时间】:2020-03-19 15:00:33
【问题描述】:

我有一个控制器方法可以创建这样的 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,它仍然总是返回列。我该如何解决这个问题?

【问题讨论】:

  • 您是否尝试过放置断点并调试您的应用程序?在操作和视图中验证ViewBag.showColumns 的值。
  • @jegtugado 是的,我有。它始终以当前设置的方式返回 true
  • 根据您的设计,您将遍历sites 并在每次迭代中确定ViewBag.showColumns。这是你真正想要的吗?最终值将基于最后一个条目。
  • 每个 osiTotal[s.ID] 都会有一个总数。因此,如果该总数不大于 0,我不希望为该站点显示列。 @jegtugado
  • 所以如果 osiTotal[3] 的值为 100。我想显示该站点的列。但是如果 osiTotal[4] 的值为 0。我不希望它显示该站点的列@jegtugado

标签: c# html asp.net-mvc linq


【解决方案1】:

您好,根据您的问题,我理解并根据您的要求。我建议你在下面提到一些事情

创建如下所述的视图模型

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

创建一个列表并设置到站点 ID 的映射并将对象添加到列表中,如下所示在您的控制器中。

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;

在视图端做如下修改

@{
     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
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-12
    • 2017-01-22
    • 1970-01-01
    • 2022-01-28
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多