所以我在.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的值:
@foreach (var mainMenuItem in Model)
{
string link = "";
string nameLower = mainMenuItem.ItemName.ToLower();
<div>
some html
@nameLower
</div>
}
关于c# - Razor:if语句后未渲染foreach块的末尾,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36520883/