Razor视图引擎语法

时间:2011-09-03 08:40:16

标签: razor

我有代表网页层次结构的模型。我想通过递归爬树和重新输出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元素而在另一个区域中关闭。有没有解决的办法?有更好的解决方案吗?

2 个答案:

答案 0 :(得分:0)

但它看起来很难看。您可以通过在标记之前添加@:来欺骗它,在这种情况下,Razor解析器会将其视为文字:

@:<ul>

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

等...

当然,正确的方法是调整视图模型,以便在服务器上完成繁重的工作,这样在视图中你所需要的只是遍历值并生成标记

答案 1 :(得分:0)

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