Razor 无法分析嵌套循环

本文关键字:嵌套循环 Razor | 更新日期: 2023-09-27 18:34:04

如果我向下走太多级别,剃刀解析器将无法处理我的代码。以下是我想要实现的目标:

@if (Model.comments.Count > 0)
{       
    <ul class="media-list">
        @foreach (Comment comment in Model.comments)
        {
            <text>
            <li class="media">
                <a class="media-left">
                    <img data-src="holder.js/64x64" alt="64x64" src="" data-holder-rendered="true" style="width: 64px; height: 64px;">
                </a>
                <div class="media-body">
                    <p>@comment.content</p>
                    @foreach (Comment reply in comment.children)
                    {
                        <li class="media">
                            <a class="media-left">
                                <img data-src="holder.js/64x64" alt="64x64" src="" data-holder-rendered="true" style="width: 64px; height: 64px;">
                            </a>
                            <div class="media-body">
                                <p>@reply.content</p>
                            </div>
                        </li>
                    }
                </div>
            </li>
            </text>
        }
    </ul>
}

但是,它会生成一系列关于缺少存在的结束标记(div 和 ul)的错误。如果我取出最里面的foreach循环,它可以正常工作:

@foreach (Comment reply in comment.children)

四处搜索我知道添加标签可以缓解问题,但我似乎也无法让它们工作。

编辑:谢谢,这是两者的结合。我在早期测试中留下了文本标签,并且一定在某个时候也删除了 ul 标签。删除文本标签并添加 ul 标签解决了这个问题。

Razor 无法分析嵌套循环

在内部foreach循环中,将<li>元素包围在<ul>标签中

....
<ul> // add this
  @foreach (Comment reply in comment.children)
  {
    <li class="media">
      <a class="media-left">
        <img data-src="holder.js/64x64" alt="64x64" src="" data-holder-rendered="true" style="width: 64px; height: 64px;">
      </a>
      <div class="media-body">
        <p>@reply.content</p>
      </div>
    </li>  
  }
</ul> // and this

您的问题可能出在<text>标签上,该标签在Razor中用于表示它不是代码。 你试过这个吗:

@if (Model.comments.Count > 0)
{       
    <ul class="media-list">
        @foreach (Comment comment in Model.comments)
        {
            <text>
            <li class="media">
                <a class="media-left">
                    <img data-src="holder.js/64x64" alt="64x64" src="" data-holder-rendered="true" style="width: 64px; height: 64px;">
                </a>
                <div class="media-body">
            </text>
                    <p>@comment.content</p>
                    @foreach (Comment reply in comment.children)
                    {
                        <li class="media">
                            <a class="media-left">
                                <img data-src="holder.js/64x64" alt="64x64" src="" data-holder-rendered="true" style="width: 64px; height: 64px;">
                            </a>
                            <div class="media-body">
                                <p>@reply.content</p>
                            </div>
                        </li>
                    }
            <text>
                </div>
            </li>
            </text>
        }
    </ul>
}

但我认为最好从您的 cshtml 中删除<text>标签。