我正在尝试使用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”元素未关闭。
答案 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>