MVC3剃刀语法困扰
问题描述:
我试图让使用剃刀语法MVC3一个很简单的观点,但似乎我不能让语法正确。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语句里面,我收到此错误
的使用块缺少结束“}”字符。
如果我尝试包裹内这两个标签,而且我得到这个错误,而不是:
的“TR”元素没有关闭。
答
您的</tr><tr>
混淆了html/code混合的“流”。
您关闭在不同的级别,而不是一个不同的水平在HTML中的TR-标签,但里面的代码。你应该把剃须刀变成输出html,它不会自己解析。
您可以包括他们是这样的:
@:</tr><tr>
或
@Html.Raw("</tr><tr>")
结果:
if (counter % 2 == 0)
{
@:</tr><tr>
}
答
我会说你错过了if语句前面的@。尝试@if(counter % 2 == 0)
。
希望有所帮助。
更新
我检查出来,并从GvS答案似乎工作得很好。 @对if语句没有必要。
@for (int i = 0; i < 5; i++)
{
if (i == 3)
{
@:</tr><tr>
}
}
答
您MIXIN g 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>
为什么?他直接在Razor代码块内,不被标签包围。 “if”应该不用@ – GvS 2011-01-28 11:06:33
因为内容是混合的。 – jgauffin 2011-01-28 11:15:26