Razor, генерирующий рваный html, он требует Html.Raw?

Учитывая динамическую сеточную модель, генерирующую HTML через бритву, похожую на:

@{ int blockCounter = 0;}

@foreach (var item in Model.Items)
{
    if (blockCounter++ % 3 == 0)
    {
    //ragged html open here, when needed
    }

    <div>..... </div>

    if (blockCounter % 3 == 0)
    {
    //ragged html close, when needed
    }

}

Есть ли альтернатива

if (blockCounter++ % 3 == 0)
{
@Html.Raw(@"<div class=""row"">")
}

Если используется следующий код:

if (blockCounter++ % 3 == 0)
{
    <div class="row">
}

Это приводит к сообщению об ошибке Parser Error Parser: в блоке foreach отсутствует закрывающий символ "}". Убедитесь, что у вас есть соответствующий символ "}" для всех символов "{" в этом блоке, и что ни один из символов "}" не интерпретируется как разметка.

Эта ошибка синтаксического анализатора является ложной, поскольку комментирование разорванного HTML или вставка его в необработанный блок устраняет ошибку. Является ли необработанный блок единственным решением?

1 ответ

Решение

Вы должны иметь возможность использовать @: для вывода текста для отдельных строк в блоке кода или тега для нескольких строк

// single line
if (blockCounter++ % 3 == 0)
{
    @:<div class="row">
}

// multiline
if (blockCounter++ % 3 == 0)
{
    <text>
        <div class="row">
        <span>more output</span>
    </text>
}

Дополнительные ссылки на синтаксис можно найти здесь... http://www.asp.net/web-pages/overview/getting-started/introducing-razor-syntax-(c)

Другие вопросы по тегам