2011-09-03 95 views
1

我有一个表示网页层次结构的模型。我要创建通过递归爬树和撕心裂肺出HTML左侧的菜单,这是我的代码:Razor视图引擎语法

@{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剃刀IntelliSense不喜欢这种断开的HTML,即在一个打开HTML元素在另一个区域关闭。有没有解决的办法?有更好的解决方案吗?

回答

0

有但它看起来很丑。您可以通过标记之前加入@:欺骗它在这种情况下,剃刀解析器会认为这是字面:

@:<ul> 

和:

@:<li> 
<a href='@parent.Url'>@parent.MenuTitle</a> 

等等

当然,纠正这样做的方式是调整你的视图模型,使得在服务器上完成繁重的工作,并且在你的视图内部,所有你需要的是循环访问值并生成标记。

0

Visual Studio intellisense无法知道两个不同循环中的开始标签和结束标签是否真正匹配,因此将它指向您是完全正常的。如果你知道你在做什么,并确定你的代码会生成匹配的标签,你可以忽略intellisense的抱怨:它不应该阻止你的剃须刀页面工作。