我是剃须刀的新手,面临着一个问题。我尝试了一些我找到的解决方案,但没有一个能够正常工作。
下面给出的是我想在局部视图中实现的代码片段。我打开<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条件下的``标签。我怎样才能做到这一点?请帮忙..
答案 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,则表标记仍然被写入(并且关闭),这可能是也可能不是理想的。