我无法弄清楚这个剃刀代码有什么问题。
IDE告诉我,我的第一个<ul>
没有匹配的结束标记。它还表示结束标记没有匹配的开始标记。它也不会将多行识别为C#代码,而是将其视为常规文本。
IDE投诉是对违规行的评论。
<div class="list-container">
@{
int i = 0;
<ul> //no matching ending tag
@foreach (var item in Model.Items)
{
if (i % 8 == 0)
{
</ul> //no matching start tag
<ul> //"Text is not allowed between the opening and closing tags for element ul"
} //IDE doesn't recognize this closing brace as code... see it as text
<li>@item.ContentItem.Title.Value</li>
i++; //IDE doesn't recognize this closing brace as code... see it as text
} //IDE doesn't recognize this closing brace as code... see it as text
</ul>
}
</div>
当执行视图时,我会在您离开}
时收到您期望的编译错误:“代码块缺少关闭”}“字符。”
只要从</ul><ul>
语句中删除if
,视图就会编译并执行。
有趣的是,当我点击其中一个ul
标签时,也会突出显示正确的开始或结束标记。
显然我做错了什么。我没有正确使用剃刀吗?
答案 0 :(得分:8)
您可以@:
使用explicitly define content。以下内容不会给我的系统带来编译错误:
<div class="list-container">
@{
int i = 0;
@:<ul>
@foreach (var item in Model.Items)
{
if (i % 8 == 0)
{
@:</ul>
@:<ul>
}
<li>@item.ContentItem.Title.Value</li>
i++;
}
@:</ul>
}
</div>
注意:你的帖子中也有不正确的评论语法,但我假设这只是针对SO的例子。
答案 1 :(得分:3)
你有C#/ Razor代码块和HTML(打开/关闭标记)块交叉,这就是你得到错误的原因。
如果我是正确的,并且您想要显示8个项目的组/列表中的所有项目,您可能需要这样的内容:
<div class="list-container">
@for (int i = 0; i < Model.Items.Count; i = i + 8)
{
<ul>
for (j = 0; j < 8; j++)
{
<li>Model.Items[i+j].ContentItem.Title.Value</li>
}
</ul>
}
</div>
我没有对此进行测试,因为我没有你的模型,但它应该至少在最小的调整下工作。
答案 2 :(得分:0)
如果我理解你要做什么,你想为模型中的每个第8个元素发出一个列表项...你需要发出父元素 - 在这种情况下是UL,然后担心LI元素,如下所示。我认为编辑正在打开b / c你正在打开和关闭你的UL并且你在你的LI周围的错误位置有一个大括号
<div class="list-container">
<ul>
@{
int i = 0;
foreach (var item in Model.Items)
{
if (i%8 == 0)
{
<li>@item.ContentItem.Title.Value</li>
}
i++;
}
}
</ul>
</div>