MVC3 Razor语法麻烦

时间:2011-01-28 10:48:55

标签: syntax asp.net-mvc-3 razor

我正在尝试使用MVC3中的Razor语法创建一个非常简单的视图,但似乎我无法正确使用语法。

我有一个像这样的简单表

<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语句中插入和时,我收到此错误

  

使用区块缺少结束“}”字符。

如果我尝试将这两个标签包装在里面,我会收到此错误:

  

“tr”元素未关闭。

3 个答案:

答案 0 :(得分:14)

你的</tr><tr>弄乱了html / code mix的“流程”。

您正在关闭不同级别的tr-tag,而不是html中的不同级别,而是在代码内部。你应该欺骗razor输出html,它不解析自己。

你可以这样包括它们:

@:</tr><tr>

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

结果:

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

点击Haack的quick reference of Razor syntax

答案 1 :(得分:3)

我会说你在if语句前面错过了@。试试@if(counter % 2 == 0)

希望有所帮助。

<强>更新

我查了一下,GvS的回答似乎也运转正常。 if语句不需要@。

@for (int i = 0; i < 5; i++)
{
    if (i == 3)
    {
        @:</tr><tr>
    }
}

答案 2 :(得分:0)

您正在混合使用foreach中的HTML和代码。这就是你遇到问题的原因。

在HTML周围使用<text></text>块,或执行以下操作:

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