Проблемы с синтаксисом бритвы MVC3 - PullRequest
8 голосов
/ 28 января 2011

Я пытаюсь сделать очень простое представление, используя синтаксис Razor в MVC3, но, похоже, я не могу понять синтаксис правильно.

У меня есть такая простая таблица

<table>
                <tr>
                    @{
                        var counter = 0;
                    }

                    @foreach (var category in ViewBag.Categories)
                    {
                        counter++;
                        <td>
                            <input type="checkbox" checked="checked" name="@("category" + category.Code)" />
                            @category.Description
                        </td>

                        if (counter % 2 == 0)
                        {
                            </tr>
                            <tr>
                        }
                    }
                </tr>
            </table>

Когда я вставляю оператор if и в него, я получаю эту ошибку

В блоке using отсутствует закрывающий символ "}".

Если я попытаюсь обернуть эти два тега внутрь, вместо этого я получу эту ошибку:

Элемент "tr" не был закрыт.

Ответы [ 3 ]

14 голосов
/ 28 января 2011

Ваш </tr><tr> портит «поток» смеси html / code.

Вы закрываете tr-тег на другом уровне, не на другом уровне в html, а внутри кода.Вы должны обмануть бритву в выводе html, чтобы она не анализировалась сама собой.

Вы можете включить их следующим образом:

@:</tr><tr>

или

@Html.Raw("</tr><tr>")

Результат:

                        if (counter % 2 == 0)
                        {
                            @:</tr><tr>
                        }

Нажмите для быстрого ознакомления Хаака с синтаксисом Razor

3 голосов
/ 28 января 2011

Я бы сказал, что вы пропустите @ перед оператором if. Попробуйте @if(counter % 2 == 0).

Надеюсь, это поможет.

Обновление

Я проверил это, и ответ от GvS , кажется, работает просто отлично. Символ @ не обязателен для оператора if.

@for (int i = 0; i < 5; i++)
{
    if (i == 3)
    {
        @:</tr><tr>
    }
}
0 голосов
/ 28 января 2011

Вы смешиваете HTML и код в foreach. Вот почему у вас проблемы.

Либо используйте <text></text> блок вокруг HTML, либо сделайте следующее:

<table>
    <tr>
        @{
            var counter = 0;
        }

        @foreach (var category in ViewBag.Categories)
        {
            @{ 
                counter++; 
            }

            <td>
                <input type="checkbox" checked="checked" name="@("category" + category.Code)" />
                @category.Description
            </td>

            @if (counter % 2 == 0)
            {
                </tr>
                <tr>
            }
        }
    </tr>
</table>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...