将 li 放入 if 语句时遇到结束标记 "li" with no matching start tag 错误

Encountered end tag "li" with no matching start tag error when putting li inside if statement

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

并致力于 Razor 视图

视图在

  • start 周围没有 if 语句的情况下工作正常

    如果我用 if 条件语句括起任何

  • 开头,我会收到此错误

    解析器错误消息:遇到没有匹配开始标记的结束标记 "li"。您的 start/end 标签是否适当平衡?

    @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 树

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

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

    @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>
    

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

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

    < li /* 在这里添加服务器代码会导致许多不便的问题 */ >

    我通过在 li 的末尾添加 @:< / li > 而不是仅仅添加 < / li > 找到了解决方案