有谁知道为什么这个Razor代码没有编译?

时间:2011-05-31 16:07:21

标签: c# asp.net-mvc-3 razor

有人可以帮我把这个剃刀语法片段编译好吗?

@var count = 0;
@foreach (var column in Enumerable.Range(0, 20).Select(i => "Title " + i) {
    if(count % 5 == 0) { 
        <tr>
    }
    <td>@column</td>
    @if(count % 5 == 4) {
        </tr>
    }
    count++;
}

2 个答案:

答案 0 :(得分:4)

您不需要count变量。我为达林的回答做了另一种解决方案:

@foreach (var pair in Enumerable.Range(0, 20).Select(i => new { Title = "Title " + i, Index = i }))
{
    if(pair.Index % 5 == 0) { 
        @:<tr>
    }
    <td>@pair.Title</td>
    if(pair.Index % 5 == 4) {
        @:</tr>
    }
}

正如您在Darin的回答和答案中所看到的,当您在一个街区内时,您不需要@。此外,您的<tr></tr>看起来“不均匀”到编译器,因此我们必须使用@:<tr>强制执行这些操作。最后,@var count = 0必须位于@{var count = 0}之类的块中。

更新:如果您确实需要一个索引(如果您没有使用Range()),那么您可以执行以下操作(使用生成Select的重载每个项目的索引):

@foreach (var pair in yourSource.Select((data, i) => new { Title = "Title " + data, Index = i }))

答案 1 :(得分:2)

@{
    var count = 0;
}
@foreach (var column in Enumerable.Range(0, 20).Select(i => "Title " + i)) 
{
    if(count % 5 == 0) 
    { 
        @:<tr>
    }
    <td>@column</td>
    if(count % 5 == 4) 
    {
        @:</tr>
    }
    count++;
}