Mik*_*erg 28 asp.net-mvc razor asp.net-mvc-3
在我当前的项目中,我有很多复杂的HTML报告,我们在那里使用rowpans和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视图引擎时就是这种情况.
Dar*_*rov 35
Visual Studio智能感知和语法突出显示不是最好的之一,但在这种情况下,它会警告您,如果条件不满意,您可能会得到无效的标记,您不应该因此而责备它.
重要的是你的项目运行正常但你可能会考虑将这个逻辑外化到HTML助手中,因为如果你说的是真的这是你在视图中所拥有的简化版本我甚至不想想你的实际代码看起来.
恕我直言,在视图中有如此多的条件逻辑是滥用.你绝对应该考虑使用HTML助手或控件,如MVCContrib Grid.
更新:
您可以尝试以下hack:
<tr>
@foreach (var ourItem in ourList) {
   if (ourItem != ourList.First()) {
      @:<tr>                
   }
   @:<td></td>
   @:</tr>
}
Razor依赖于匹配标签来确定代码和标记之间的自动转换.你无法"禁用"Razor的这个功能(至少在没有重写Razor解析器的大部分的情况下).
你可以使用Darin的建议解决它,虽然我不明白(至少不是你的简化例子)为什么你的观点需要如此复杂.为什么不写下面的代码:
@foreach (var ourItem in ourList) {
   <tr>
   <td>...</td>
   </tr>
}
虽然标签可能会在生成的标记中达到平衡,但您提供的源代码很难推断其正确性.
| 归档时间: | 
 | 
| 查看次数: | 18976 次 | 
| 最近记录: |