如果语句删除C#中的0值计数

时间:2016-05-03 13:15:52

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

我从Warehouse数据库中提取数据并显示在网页上。

这会提取所有数据。

@foreach (WarehouseCategoryModel categoryModel in Model.Categories)
{
     <tr>
         <td>@Html.ActionLink(categoryModel.Name, "Category", "-WarehouseCatalog", new { ide = categoryModel.ID }, null)</td>
         <td>@categoryModel.Count</td>
     </tr>
 }

我需要显示Count大于0的每个类别。

我试过了:

if(@categoryModel.Count > 0)
{
  <td>@categoryModel.Count</td>
}

7 个答案:

答案 0 :(得分:3)

您可以使用Where()子句明确过滤掉您正在迭代的项目:

<!-- Only iterate through those with Counts greater than 0 -->
@foreach (WarehouseCategoryModel categoryModel in Model.Categories.Where(c => c.Count > 0))
{
     <!-- Do work here -->
}

如果您想处理模型或类别可能为null的方案,可以添加以下显式检查:

<!-- Ensure you have categories to loop through (avoids null exceptions) -->
@if(Model?.Categories != null)
{
      <!-- Only iterate through those with Counts greater than 0 -->
      foreach (WarehouseCategoryModel categoryModel in Model.Categories.Where(c => c.Count > 0))
      {
           <!-- Do work here -->
      }
}
else 
{
    <tr>
        <td>No Categories Available</td>
    </tr>
}

如果您计划处理此问题,您可能希望将此逻辑包含在ViewModel本身而不是View中,但总体思路是相同的。

答案 1 :(得分:1)

您的@位置错误。它应该在if之前,就像这样

@if(categoryModel.Count > 0)
{
    <td>@categoryModel.Count</td>
}
else
{
    <td></td>
}

答案 2 :(得分:0)

如评论中所述。这应该有效:

<td>
if(@categoryModel.Count > 0)
{
   @categoryModel.Count
}
</td>

答案 3 :(得分:0)

从IF语句中删除@。你已经在foreach循环中使用过。

if(categoryModel.Count > 0)
{
    <td>@categoryModel.Count</td>
}
else
{
    <td></td>
}

答案 4 :(得分:0)

你可以采用几种不同的方法,你要记住的方法在复杂的迭代中会很慢。我将指出潜在的代码错误:

  1. @if会触发正确的剃刀,除非您Htmlforeach之间没有if
  2. 样品:

    // Valid
    @foreach(var .... model.Categories)
    {
         if(...)
         {
    
         }
    }
    
    // Invalid:
    @foreach(var .... model.Categories)
    {
         <td>Content</td>
         if(...)
         {
    
         }
    }
    
    1. 您的模型应完全合格,Example.Models.Warehouse
    2. 您应该展示如何为视图宣布@model。这可以帮助我们进一步区分,你确定你有多个吗?我会像这样构造以更好地保存表格行数据:

      @if(Model != null)
      {
          foreach(Example.Models.Warehouse model in Model.Categories)
          {
             <tr>
                 <td>@model.Something</td>
             </tr>
          }
      }
      

      不需要条件,如果它是空的,则循环不会执行。

答案 5 :(得分:0)

知道了,感谢所有反馈。这是我的最终解决方案。

            @if(categoryModel.Count > 0)
            {
                <td>@Html.ActionLink(categoryModel.Name, "Category","~WarehouseCatalog", new { id = categoryModel.Id }, null)</td>
                <td>@categoryModel.Count</td>
            }

答案 6 :(得分:0)

您可以尝试以下操作。我首先检查了列表中是否有项目,如果有创建HTML table,请遍历项目并为每个项目创建table row

@if (Model.Categories.Count > 0)
{
     <table>
          foreach (WarehouseCategoryModel categoryModel in Model.Categories)
          {
               <tr>
                    <td>@Html.ActionLink(categoryModel.Name, "Category", "-WarehouseCatalog", new { ide = categoryModel.ID }, null)</td>
                    @if(categoryModel.Count > 0)
                    {
                         <td>@categoryModel.Count</td>
                    }
                    else
                    {
                         <td>&nbsp;</td>
                    }
               </tr>
          }
     </table>
}

我希望这会有所帮助。