在我的视图中Razor告诉我,我的Foreach循环缺少一个结束括号(}
)
它还告诉我我的<div class="row">
缺少其结束标记。
@{int spanCounter = 0;}
@foreach (var item in Model)
{
if(spanCounter == 0)
{
<div class="row">
}
spanCounter += item.Span;
<div class="span@(item.Span)">
@item.Html
</div>
@if(spanCounter == 12)
{
@spanCounter = 0
</div>
}
}
我见过类似的问题,但他们似乎关注Razor希望适当分层的事实。即,这是非法的:
if(condition)
{
<foo>
}
else
{
<foo>
}
</foo>
更新 该模型是Html内容“块”列表
为了更清楚一点,我想在<div></div>
“行”中写出多个块(<div></div>
)
<div></div>
阻止,直到达到最大跨度宽度(12)答案 0 :(得分:3)
还有另一种方法可以避免重复代码:
if(condition)
{
@:<foo>
}
else
{
@:<foo>
}
</foo>
答案 1 :(得分:2)
像这样替换
@{int spanCounter = 0;}
@foreach (var item in Model)
{
if (spanCounter == 0 || spanCounter == 12)
{
<div class="row">
@spanCounter += @item.Span;
<div class="span@(item.Span)">
@item.Html
</div>
</div>
}
else
{
spanCounter += item.Span;
<div class="span(@item.Span)">
@item.Html
</div>
}
}
答案 2 :(得分:0)
您收到此错误的原因是有条件地呈现了结束标记,因此您无法保证将其添加到视图中:
spanCounter变量在这里递增:
spanCounter += item.Span;
<div class="span@(item.Span)">
@item.Html
</div>
因此,你不能保证它符合这个if语句的条件,即此时它可能大于12:
@if(spanCounter == 12)
{
</div>
}
您需要为有条件渲染的元素提供完整标记。你需要这样的东西:
var spanCounter = 0;
<div class="row">
@foreach (var item in Model)
{
spanCounter += item.Span;
<div class="span@(item.Span)">
@item.Html
</div>
if(spanCounter == 12)
{
spanCounter = 0;
}
}
</div>
答案 3 :(得分:0)