【问题标题】:If Statement to remove 0 Value Count in C#If 语句在 C# 中删除 0 值计数
【发布时间】:2016-05-03 13:15:52
【问题描述】:

我正在从 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>
}

【问题讨论】:

  • 即使条件没有执行,你仍然需要cell,所以把 放在IF外面

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


【解决方案1】:

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

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

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

<!-- 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 中,但总体思路是相同的。

【讨论】:

  • 我喜欢 Linq,但如果他没有类别,它将不会执行循环的内部 foreach。
  • 没错。您可以对其进行修改以明确检查ModelModel.Categories 是否为空,然后考虑向用户提供诸如“无可用类别”消息之类的其他内容。这真的只是取决于个人喜好。
  • 是的,我喜欢这个解决方案。我相信你对这个问题有更好的答案之一。遗憾的是,我确定该错误是由印刷错误引起的。
【解决方案2】:

你把@ 放错地方了。它应该在if 之前,像这样

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

【讨论】:

    【解决方案3】:

    如 cmets 中所述。这应该有效:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

        您可以通过几种不同的方法来执行此操作,请记住您所采用的方法会因复杂的迭代而变慢。我会指出潜在的代码错误:

        1. @if 将触发适当的 Razor,除非您的 foreachif 之间没有 Html

        示例:

        // Valid
        @foreach(var .... model.Categories)
        {
             if(...)
             {
        
             }
        }
        
        // Invalid:
        @foreach(var .... model.Categories)
        {
             <td>Content</td>
             if(...)
             {
        
             }
        }
        
        1. 您的模型应该是完全合格的,Example.Models.Warehouse

        您应该展示您实际上是如何为视图声明 @model 的。哪个可以帮助我们进一步区分,你确定你有不止一个吗?我会这样构造以更好地保存表格行数据:

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

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

        【讨论】:

          【解决方案6】:

          知道了,谢谢大家的反馈。这是我的最终解决方案。

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

          【讨论】:

            【解决方案7】:

            您可以尝试以下方法。我首先检查列表中是否有项目,如果有创建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>
            }
            

            我希望这会有所帮助。

            【讨论】:

              猜你喜欢
              • 2020-03-18
              • 1970-01-01
              • 2019-02-20
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多