所以我在.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。
如何让我的其余代码呈现为代码?
答案 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>
}