将 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 > 找到了解决方案
我正在使用 asp.net MVC 5 和 Visual studio 2013
并致力于 Razor 视图
视图在
如果我用 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 > 找到了解决方案