3

我无法弄清楚这个剃须刀代码有什么问题。

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标签时,正确的开始或结束标签也会突出显示。

显然我做错了什么。我没有正确使用 Razor 吗?

4

3 回答 3

10

您可以使用@:显式定义内容。以下不会在我的系统上给出编译错误:

<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 示例。

于 2013-07-02T16:13:15.493 回答
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>

我没有对此进行测试,因为我没有您的模型,但它至少应该可以通过最少的调整来工作。

于 2013-07-02T16:17:52.313 回答
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>
于 2013-07-02T16:19:28.283 回答