【问题标题】:Encountered end tag "li" with no matching start tag error when putting li inside if statement将 li 放入 if 语句时遇到结束标记“li”没有匹配的开始标记错误
【发布时间】:2016-12-05 10:04:40
【问题描述】:

我正在使用 asp.net MVC 5 和 Visual Studio 2013

并致力于 Razor 视图

如果没有围绕

  • start 的 if 语句,视图工作正常

    如果我包含任何

  • 开头,并带有 if 条件语句,我会收到此错误

    解析器错误消息:遇到没有匹配开始标记的结束标记“li”。您的开始/结束标签是否正确平衡?

    @using TheodorHR_App.Models
    <div id="tree_CadreGroupLevel" class="tree-demo">
        <ul>
            @{
                TheodorHrEntities db = new TheodorHrEntities();
                var nodes = db.Cadres.ToList();
                foreach (var node in nodes)
                {
                    Cadre root = new Cadre();
                    root.Id = node.Id;
                    if (@Model.RuleElementCadres.Select(e => e).Where(e => e.Cadre == node.Id).Count() > 0)
                    {
                        <text>
                            <li id="Cnode_@node.Id" data-jstree='{ "selected" : true }'>
                        </text>
                    }
                    else
                    {
                        <text>
                        <li id="Cnode_@node.Id">
                        </text>
                    }
    
                            <a href="#">@node.Name</a>
                            <ul>
                                @{
                                    var nodes1 = db.JobGroups.Where(jg => jg.CadreId == @node.Id).ToList();
                                    foreach (var node1 in nodes1)
                                    {
                                        Cadre root1 = new Cadre();
                                        root1.Id = node1.Id;
                                        <li id="Gnode_@node1.Id">
                                            <a href="#">@node1.Name</a>
                                            <ul>
                                                @{
                                                    var nodes2 = db.JobGroupJobLevels.Where(jl => jl.JobGroup == @node1.Id).ToList();
                                                    foreach (var node2 in nodes2)
                                                    {
                                                        Cadre root2 = new Cadre();
                                                        root2.Id = node2.Id;
                                                        <li id="Lnode_@node2.Id">
                                                            <a href="#">@node2.JobLevel1.Name</a>
                                                            <ul></ul>
                                                        </li>
                                                    }
                                                }
                                            </ul>
                                        </li>
                                    }
                                }
                            </ul>
                    </li>
                }
            }
        </ul>
    </div>
    
    • 第一次回答后更新 不工作

    Razor 将其理解为 c# 并尝试用双引号将其括起来不起作用,因为文字已经包含双引号,然后尝试用 \ 替换“这不起作用,因为它没有给 js 树赋予意义我正在建设

  • 【问题讨论】:

    • 语法错误,尝试像"data-jstree=\"{ 'selected' : true }\""一样解决它

    标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-3 razor


    【解决方案1】:

    我在其他地方找到了解决方案

    我认为在这样的 html 标记中添加服务器端代码存在问题

    我找到了解决方案,方法是在 li 末尾添加 @: 而不是仅仅

    【讨论】:

      【解决方案2】:

      哦,我忘了在属性两边加上引号。

      我认为使用条件运算符可能会解决问题。

      @using TheodorHR_App.Models
      <div id="tree_CadreGroupLevel" class="tree-demo">
      <ul>
          @{
              TheodorHrEntities db = new TheodorHrEntities();
              var nodes = db.Cadres.ToList();
              foreach (var node in nodes)
              {
                  Cadre root = new Cadre();
                  root.Id = node.Id;
      
                          <li id="Cnode_@node.Id" @(Model.RuleElementCadres.Select(e => e).Where(e => e.Cadre == node.Id).Count() > 0 ?  "data-jstree='{ 'selected' : true }'" : "") >
      
      
                          <a href="#">@node.Name</a>
                          <ul>
                              @{
                                  var nodes1 = db.JobGroups.Where(jg => jg.CadreId == @node.Id).ToList();
                                  foreach (var node1 in nodes1)
                                  {
                                      Cadre root1 = new Cadre();
                                      root1.Id = node1.Id;
                                      <li id="Gnode_@node1.Id">
                                          <a href="#">@node1.Name</a>
                                          <ul>
                                              @{
                                                  var nodes2 = db.JobGroupJobLevels.Where(jl => jl.JobGroup == @node1.Id).ToList();
                                                  foreach (var node2 in nodes2)
                                                  {
                                                      Cadre root2 = new Cadre();
                                                      root2.Id = node2.Id;
                                                      <li id="Lnode_@node2.Id">
                                                          <a href="#">@node2.JobLevel1.Name</a>
                                                          <ul></ul>
                                                      </li>
                                                  }
                                              }
                                          </ul>
                                      </li>
                                  }
                              }
                          </ul>
                  </li>
              }
          }
      </ul>
      

      【讨论】:

      • * 更新上面的截图作为对原始帖子的更新,因为我无法在此评论中发布照片.. 不起作用,Razor 将其理解为 c# 并尝试用双引号将其括起来不起作用,因为文字已经包含双引号,然后尝试用 \ 替换“这不起作用,因为它没有给我正在构建的 js 树赋予意义
      • 我忘了把引号放在 html 属性中试试这个。 code
      • e).Where(e => e.Cadre == node.Id).Count() > 0 ? " data-jstree='{ 'selected' : true }'" : "") >
    • 不起作用我认为在 html 标签中添加服务器端代码存在问题......但我通过在 li 末尾添加 @: 找到了其他解决方案只是 ...感谢您的关心
    • 猜你喜欢
      相关资源
      最近更新 更多
      热门标签