我有代表网页层次结构的模型。我想通过递归爬树和重新输出HTML来创建一个左侧菜单,这是我的代码:
@{var parent = Model}
<!-- create stating html for ancestors up the tree -->
@do{
<ul>
<li><a href='@parent.Url'>@parent.MenuTitle</a>
@{parent = parent.Parent}
}while(parent != null)
<!-- create children of the current page -->
<ul>
@foreach (var child in Model.Children)
{
<li><a href="@child.Url">@child.MenuTitle</a></li>
}
</ul>
<!-- close stating html for ancestors up the tree -->
@{parent = Model}
@do{
</li>
</ul>
@{parent = parent.Parent}
}while(parent != null)
然而,Visual Studio中的Razor intellisense不喜欢这种断开连接的HTML,即在一个区域中打开HTML元素而在另一个区域中关闭。有没有解决的办法?有更好的解决方案吗?
答案 0 :(得分:0)
但它看起来很难看。您可以通过在标记之前添加@:
来欺骗它,在这种情况下,Razor解析器会将其视为文字:
@:<ul>
和
@:<li>
<a href='@parent.Url'>@parent.MenuTitle</a>
等...
当然,正确的方法是调整视图模型,以便在服务器上完成繁重的工作,这样在视图中你所需要的只是遍历值并生成标记
答案 1 :(得分:0)
Visual Studio intellisense无法知道两个不同循环中的开始和结束标记是否真正匹配,因此它对您来说是完全正常的。如果您知道自己在做什么,并确保您的代码会生成匹配的标签,您可以忽略智能感知的抱怨:它不应该阻止您的剃刀页面工作。