asp.net-mvc - Razor View 引擎 : Complex looping and HTML

标签 asp.net-mvc asp.net-mvc-3 razor

我当前的项目中有很多复杂的 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/

相关文章:

asp.net-mvc - 手动触发万无一失的验证

asp.net - 配置错误 : <compilation debug ="true" targetFramework ="4.0"> ASP. NET MVC3

jquery - 如果 <td> 包含多个值,如何使用 jquery 获取 <td> 内的文本

c# - 为什么 Razor 在 html 元素上设置的条件样式总是 html 编码不正确

asp.net-mvc - 无法在 ActionResult 中检索 ViewModel

html - 使用媒体查询调整响应表

sql-server - 无法创建本地sql server 2012

asp.net - Session 在 MVC 中实际上是如何工作的?

asp.net-mvc - 如何在 ASP.NET MVC API Controller 中获取用户 IP

asp.net-mvc-3 - 如何在MVC 3 RAZOR中动态设置图像路径