2011-12-06 44 views
0

我遇到<text>标记存在问题。由于底部附近的</tr>标签,下列代码无法运行。如果我删除它,它会工作,但它然后打印一个不正确的表。如果我离开它,我会得到以下错误:遭遇结束标记“tr”,没有匹配的开始标记。您的开始/结束标签是否适当平衡?Mvc 3剃须刀,视图中的文本块?

我如何告诉剃须刀忽略这样的事情?我也试图在/ tr周围添加一个文本标签,同时也在所有的html代码周围添加一个文本标签,但是会产生这样的结果:遭遇的结束标签“文本”没有匹配的开始标签。您的开始/结束标签是否正确平衡?

@{        
int i = 0; 
foreach (var item in Model.Model) 
{ 
    if (i % 2 == 0) 
    { 
     <text><tr class="alternate-row"></text> 
    } 
    else 
    { 
     <text><tr></text> 
    } 

     <td> 
      <input type="checkbox" /> 
     </td> 
     <td> 
      @item.Firstname 
     </td> 
     <td> 
      @item.Surname 
     </td> 
     <td> 
      <a href="">[email protected]</a> 
     </td> 
     <td class="options-width"> 
      <a href="" title="Edit" class="icon-1 info-tooltip"></a><a href="" title="Edit" class="icon-2 info-tooltip"> 
      </a><a href="" title="Edit" class="icon-3 info-tooltip"></a><a href="" title="Edit" 
       class="icon-4 info-tooltip"></a><a href="" title="Edit" class="icon-5 info-tooltip"> 
       </a> 
     </td>   
    </tr> 

}  
}  

更新与另一个问题

为什么剃须刀甚至测试HTML标签?

+2

剃刀测试HTML标签,因为解析器需要检测哪个页面上的元素是剃刀,哪些是纯HTML。对待它与标准Web窗体视图引擎如何与MVC协同工作有很大区别。 –

回答

1

你可以做到这一点

<[email protected] (i % 2 == 0) { <text> class="alternate-row"</text> }> 

,或者你可以设置一个变量,“拥有”你的扩展HTML为<tr>标签这样

int i = 0; 
foreach (var item in Model.Model) 
{ 
    string ext = ""; 
    if (i % 2 == 0) 
    { 
     ext = " class=\"alternate-row\""; 
    } 

    <[email protected]> 
    // ... 

这就是最简单的办法,或者你可以创建一个自定义HTML帮手。

的更多信息:Creating Custom HTML Helpers

更新

达林也表示,他会创建一个自定义的HTML帮助。

我也建议,如果你需要这一次以上。

结论

的第一选择是创建一个HTML帮手,二是用我的第一个 办法(内嵌if语句),最后用一个变量。

它并不是真的取决于你需要多久,但如果你真的需要 只有一次,选择第一种方法。 三种解决方案中的每一种都是正确的,其决定取决于您拥有的时间 。

希望这可以帮助你

+0

所以你的意思是没有其他方法可以解决这个问题? – Patrick

+0

我用另一个解决方案更新了我的答案。 – dknaack

+0

class =“alternate-row”}>工作正常,但仍然感觉有点过于只有一个 – Patrick

0

请从tr标签周围的<text>块的条件

+0

对不起作用,已经尝试过了。 – Patrick

1
<[email protected](i % 2 == 0 ? " class=\"alternate-row\"" : "")> 
    ... some tds 
</tr> 

但我个人会写一个自定义的HTML帮助避免这种面条代码,并沿着线的东西:

@using (Html.Tr(i)) 
{ 
    <td> 
     <input type="checkbox" /> 
    </td> 
    <td> 
     @item.Firstname 
    </td>  
    ... 
} 

我也重构并摆脱foreach循环,并用一个简单的显示模板调用:@Html.DisplayForModel()替换它。

1

我有使用JavaScript的替代方法。由于您使用的是MVC3,因此您可能有权访问jQuery。添加JavaScript的这个小金块(See jsFiddle Example

$(function() { 
    $('tr:odd').addClass('alternate-row'); 
})