剃刀:在if语句之后,foreach块的结束不呈现

时间:2016-04-09 18:22:41

标签: c# .net razor razor-2

所以我在.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。

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

1 个答案:

答案 0 :(得分:2)

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

当您启动 c#代码并将其与html混合时,您只需要 @ 符号。

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

@foreach (var mainMenuItem in Model)
{

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

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