我有很多复杂的HTML报告在我目前的项目中,我们执行大量条件渲染TRs和TDs与rowspan和colspans。
它有时看起来像这样(这是非常简化):
<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视图引擎时的情况。
解决方法
Visual Studio Intellisense和语法高亮不是最好的,但在这种情况下它警告你,如果条件不满足,你可能会得到无效的标记,你不应该责怪它。
重要的是,你的项目运行良好,但你可能会考虑将这个逻辑外部化为HTML助手,因为如果你说的是真的,这是一个简化的版本,你在视图中,我甚至不想想象你的实际代码看起来。
IMHO在一个视图中有这么多的条件逻辑是滥用。你绝对应该考虑使用HTML助手或控件,如MVCContrib Grid。
更新:
您可以尝试以下hack:
<tr> @foreach (var ourItem in ourList) { if (ourItem != ourList.First()) { @:<tr> } @:<td></td> @:</tr> }