Кто-нибудь знает, почему этот код Razor не компилируется? - PullRequest
2 голосов
/ 31 мая 2011

Может ли кто-нибудь помочь мне скомпилировать этот фрагмент синтаксиса бритвы?

@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 ]

4 голосов
/ 31 мая 2011

Вам не нужна переменная 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>
    }
}

Как видно из ответа Дарина и этого ответа, вам не нужно @, когда вы находитесь внутри блока. Кроме того, ваши <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 }))
2 голосов
/ 31 мая 2011
@{
    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++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...