如何在if else循环中关闭表标记

时间:2013-03-20 13:05:30

标签: if-statement razor html-table

我是剃须刀的新手,面临着一个问题。我尝试了一些我找到的解决方案,但没有一个能够正常工作。

下面给出的是我想在局部视图中实现的代码片段。我打开<table>但想要在if循环中有条件地关闭它,如图所示。

我从中获取结果的方法,它在我的模型中填充list属性,然后在局部视图中返回模型。

首先,我检查Type是否为“H”,然后表标签应该打开,类型为“H”的整行将被标识为标题。如果键入下一个条目表示“D”,则表示它以“H”类型存在。如果Details中的下一个元素的类型也是“H”,则关闭表标记。因此,从第一个识别的“H”到下一个识别的“H”表格应该存在,对于下一个“H”类型,应该开始一个新表。

@if (Model.Details.Count() > 0)
{
    for (int count = 0; count < Model.Details.Count; count++)
    {
        //for heading
        if (Model.Details[count].Type == "H") 
        {
          <table>
                <thead>
                    <tr>
                        @if (Model.Details[count].Column1 != null)
                        {
                            <th>
                                @Model.Details[count].Column1.ToString();
                            </th> 
                        }
                        @if (Model.Details[count].Column2 != null)
                        {
                            <th>
                                @Model.Details[count].Column2.ToString();
                            </th> 
                        }
                        @if (Model.Details[count].Column3 != null)
                        {
                            <th>
                                @Model.Details[count].Column3.ToString();
                            </th> 
                        }
                    </tr>
                </thead>
                @if (count < Model.Details.Count)
                {
                    if (Model.Details[count + 1].Type == "H")
                    {
                        </table>
                    }
                }
        }
        //for data under each heading
        @if (Model.Details[count].Type == "D")
        {
            <tr>
                @if (Model.Details[count].Column1 != null)
                {
                    <td>
                         @Model.Details[count].Column1.ToString();
                    </td> 
                }
                @if (Model.Details[count].Column2 != null)
                {
                    <td>
                        @Model.Details[count].Column2.ToString();
                    </td> 
                }
                @if (Model.Details[count].Column3 != null)
                {
                    <td>
                        @Model.Details[count].Column3.ToString();
                    </td> 
                }
            </tr>
        }
    }
}

在开始表标签上显示错误

  

“”table“元素未关闭。所有元素必须是   自动关闭或具有匹配的结束标记。“

在标签关闭时,错误显示

  

“遇到结束标记”表“没有匹配的开始   标签。您的开始/结束标签是否正确平衡?“

我想关闭if条件下的``标签。我怎样才能做到这一点?请帮忙..

1 个答案:

答案 0 :(得分:1)

为什么不将表格标签移到剃刀代码之外

<table>
@if (Model.Details.Count() > 0)
        {
           for (int count = 0; count < Model.Details.Count; count++)
           {
             if (Model.Details[count].Type == "H") 
                {
                        <thead>
                            <tr>
                                @if (Model.Details[count].Column1 != null)
                                {
                                    <th>
                                        @Model.Details[count].Column1.ToString();
                                    </th> 
                                }
                                @if (Model.RetriveImpactDetails[count].Column2 != null)
                                {
                                    <th>
                                        @Model.Details[count].Column2.ToString();
                                    </th> 
                                }
                                @if (Model.Details[count].Column3 != null)
                                {
                                    <th>
                                        @Model.Details[count].Column3.ToString();
                                    </th> 
                                }
                            </tr>
                        </thead>
                }
           }
       }
 </table>

这将消除检查它是否是模型的最终迭代的需要(无需动态关闭表)。它确实意味着如果您的Count的值为0,则表标记仍然被写入(并且关闭),这可能是也可能不是理想的。