0

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

下面给出的是我想在部分视图中实现的代码片段。我正在打开<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>
        }
    }
}

在打开的表格标签上,错误说

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

在标签结束时,错误说

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

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

4

1 回答 1

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

于 2013-03-20T13:07:59.507 回答