【问题标题】:How to close a table tag in if else loop如何在 if else 循环中关闭表格标签
【发布时间】:2013-03-20 13:05:29
【问题描述】:

我是剃须刀新手,遇到了问题。我尝试了一些我找到的解决方案,但它们都不起作用。

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

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

首先,我检查类型是否为“H”,然后应该打开表格标签,并且类型为“H”的整行将被识别为标题。如果 type 下一个条目显示“D”,则表示它的数据存在于“H”类型中。如果详细信息中下一个元素的类型也是“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" 元素没有关闭。所有元素必须是 自动关闭或具有匹配的结束标记。”

在标签结束时错误提示

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

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

【问题讨论】:

    标签: if-statement razor html-table


    【解决方案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,则 table 标记仍会被写入(并关闭),这可能是理想的,也可能不是理想的。

    【讨论】:

    • 感谢 Dave 的快速回复。我想通过将标签放入 if 循环来对数据进行更多操作。有没有办法我可以做到这一点?你想看看整个代码吗?
    • @mailmehere 您的方法可能会给您留下一个封闭的表格标签,然后您的代码会打开 TR 标签!你将有多少行标题?
    • 可能有任意数量的行,具体取决于将传递给方法的数据。可以有 2 或 3 或 4 个标题行,其中 4 到 5 个或有时没有标题数据行。
    • @mailmehere 您可以尝试破解您的原始代码,并将 置于一个条件中,例如:if (true){
      }总是评估为真,这意味着表格总是显示,但这可能会解决问题(但这是一个可怕的解决方案(如果有效的话))
    • 我们很清楚,我的意思是对您的原始代码进行此更改,而不是我的建议!那是你做的吗?
    猜你喜欢
    • 2014-03-30
    • 2022-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    相关资源
    最近更新 更多