我当前的项目中有很多复杂的 HTML 报告,在那里我们使用 rowspans 和 colspans 执行大量的 TR 和 TD 条件渲染。
它有时看起来像这样(这是非常简化的):
<tr>
@foreach (var ourItem in ourList) {
if (ourItem != ourList.First()) {
<tr>
}
<td></td>
</tr>
}
然而,Razor 声称:“foreach 循环缺少一个结束的“}”字符”。 (在 Visual Studio 中)
我试图包装
<tr>
在 <text></text>
这使得结束 } 问题消失,只是在运行时发现:“遇到没有匹配的开始标签的结束标签“tr”。您的开始/结束标签是否正确平衡”。我将如何在说服 Razor 根本不关心 HTML 的同时进行这种条件渲染,因为在所有循环完成后 HTML 是平衡的。或者至少在使用 ASP.NET View 引擎时就是这种情况。
最佳答案
Visual Studio Intellisense 和语法突出显示不是最好的之一,但在这种情况下,它会警告您,如果不满足条件,您可能会得到无效标记,您不应该为此责怪它。
重要的是您的项目运行良好,但您可能会考虑将此逻辑外部化为 HTML 帮助程序,因为如果您所说的是真的,这是您在 View 中拥有的内容的简化版本,我什至不想想象您的实际代码看起来。
恕我直言,在一个 View 中有如此多的条件逻辑是一种滥用。您绝对应该考虑使用 HTML 帮助程序或控件,例如 MVCContrib Grid .
更新:
您可以尝试以下hack:
<tr>
@foreach (var ourItem in ourList) {
if (ourItem != ourList.First()) {
@:<tr>
}
@:<td></td>
@:</tr>
}
关于asp.net-mvc - Razor View 引擎 : Complex looping and HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4781896/