如何关闭/重新打开if语句内部的标记

本文关键字:内部 语句 if 何关闭 新打开 | 更新日期: 2023-09-27 18:20:48

我不知道这个剃刀代码出了什么问题。

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>

当视图被执行时,我会得到您在省略}时所期望的编译错误:"代码块缺少一个结束字符"}"。"

一旦从if语句中删除</ul><ul>,视图就会编译并执行。

有趣的是,当我点击其中一个ul标签时,正确的开始或结束标签也会高亮显示。

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

如何关闭/重新打开if语句内部的标记

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

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

您有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>

我没有测试这个,因为我没有你的模型,但它至少应该在最小的调整下工作。

如果我理解您想要做什么,那么您希望为模型中的每8个元素发出一个列表项。。。您需要发射父元素——在这种情况下是UL,然后担心LI元素,如下所示。我认为编辑在抱怨你打开和关闭你的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>