Razor:foreach 块的末尾在 if 语句后不呈现

Razor: end of foreach block not rendering after if statement

所以我在 .net Razor 中有以下代码:

<div id="menu_left" class="menu_item">

    @foreach (var mainMenuItem in Model)
            {

                    string link ="";
                    string nameLower = @mainMenuItem.ItemName.ToLower();
                    if (mainMenuItem.SubItem.Count() > 0)
                                  {
                                    link +="javascript:submenu('";
                                    link += nameLower + "_dropdown";
                                    link += "', 'dropdown_menu' );";
                                  } 
                     else 
                                  {
                                         link = mainMenuItem.Link;
                                  }
                      }

                <a href="@link" class="menu_a">
                    <img src="@mainMenuItem.Image" class="menu_link" id="@mainMenuItem.ItemName.ToLower()" />
                </a>

            }

    </div>

但是当我尝试 运行 它时,.net 编译器将 if 语句末尾的行呈现为 html 文字而不是将其编译为代码,如下所示编译源中的以下部分:

Line 145:  WriteLiteral(@"                         else 
Line 146:                                        {
Line 147:                                               link = mainMenuItem.Link;
Line 148:                                        }
Line 149:                            }

我试过将整个代码块包装在 @{} 代码块中,这样它就知道这是代码,但是编译器似乎在错误的大括号上结束了该块,就像foreach 循环。

我在 SO 上看到其他人在 'if' 语句中有 html 时遇到同样的问题,但此块中没有 html。

如何让我的其余代码呈现为代码?

中删除@
 @mainMenuItem.ItemName.ToLower();

你只需要 @ 符号,当你开始 c# 代码并且当你将它与 html 混合时。

例如,在这种情况下,您将需要 @ 符号来呈现 nameLower's 值:

@foreach (var mainMenuItem in Model)
{

    string link = "";
    string nameLower = mainMenuItem.ItemName.ToLower();

    <div>
        some html
        @nameLower
    </div>
}