Razor视图引擎语法

Razor视图引擎语法,razor,Razor,我有一个表示网页层次结构的模型。我想通过递归爬树并呈现HTML来创建左侧菜单,这是我的代码: @{var parent = Model} <!-- create stating html for ancestors up the tree --> @do{ <ul> <li><a href='@parent.Url'>@parent.MenuTitle</a> @{parent = par

我有一个表示网页层次结构的模型。我想通过递归爬树并呈现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)
@{var parent=Model}
@做{
  • @{parent=parent.parent} }while(父级!=null)
      @foreach(Model.Children中的变量child) {
    • }
    @{parent=Model} @做{
@{parent=parent.parent} }while(父级!=null)

然而,Visual Studio中的Razor intellisense不喜欢这种断开连接的HTML,即在一个区域打开HTML元素,在另一个区域关闭。有办法解决这个问题吗?有更好的解决办法吗?

有,但看起来很难看。在标签之前添加“<代码> @:/COD>”可以欺骗它,在这种情况下,Rasor解析器会将其视为文字:

@:<ul>
@:
以及:

@:
  • 等等


    当然,正确的方法是调整视图模型,使繁重的工作在服务器上完成,这样在视图中,您只需循环遍历值并生成标记。

    Visual Studio intellisense无法知道两个不同循环中的开始和结束标记是否真的存在匹配,所以它指向你是完全正常的。如果您知道自己在做什么,并且确信您的代码将生成匹配的标记,那么您可以忽略intellisense的抱怨:它不应该阻止您的razor页面工作

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