我正在尝试设置一个从数据表中拉出的下拉菜单。这对于菜单的第一级非常有效。
工作代码:
<ul class="dropdown-menu">
@foreach (System.Data.DataRow dr in menu.Rows)
{
if (Level1 != dr["Level1"].ToString())
{
<li><a href="#">@dr["Level1"].ToString()</a></li>
Level1 = @dr["Level1"].ToString();
}
}
</ul>
当我尝试添加嵌套的if语句时,问题就出现了。如果你把这段代码放到Visual Studio中,你会注意到Razor不能识别@foreach
循环的闭括号。
代码中断:
<ul class="dropdown-menu">
@foreach (System.Data.DataRow dr in menu.Rows)
{
if (Level1 != dr["Level1"].ToString())
{
<li><a href="#">@dr["Level1"].ToString()</a></li>
Level1 = @dr["Level1"].ToString();
if (Level2 != dr["Level2"].ToString())
{
<li><a href="#">@dr["Level2"].ToString()</a></li>
Level2 = @dr["Level2"].ToString();
}
}
} <!-- the issue is the bracket on this line -->
</ul>
发布于 2013-04-29 23:55:03
您需要将有问题的部分包装在<text>
标记中。请看这个答案:https://stackoverflow.com/a/6099659/1451531
发布于 2013-04-30 00:01:20
我不认为您需要在将值赋给LevelX
的行中的@dr[...]
前面编写@
<ul class="dropdown-menu">
@foreach (System.Data.DataRow dr in menu.Rows)
{
if (Level1 != dr["Level1"].ToString())
{
<li><a href="#">@dr["Level1"].ToString()</a></li>
Level1 = dr["Level1"].ToString(); // no need here
if (Level2 != dr["Level2"].ToString())
{
<li><a href="#">@dr["Level2"].ToString()</a></li>
Level2 = dr["Level2"].ToString(); // and no need here
}
}
} <!-- the issue is the bracket on this line -->
</ul>
编辑
为了解决这个问题,为什么不识别右括号。
TL;DR
由于您在代码区域中再次使用,因此不需要 @
**-sign**.
详细信息
html-region,部分定义了一个文本,其中<li>...</li>
被解释为。
在结束code-region之后,文本外部C#-code. </li>
再次激活,解释为C#-code.因此,对Level1
的赋值是可能的。在这里添加一个@
-sign到dr
和在一个“普通”的cs-file中有相同的结果:
这是一个语法错误。
发布于 2017-01-06 09:19:10
根据this answer,如果一行被解释为标记而不是代码,请在其前面加上@。如果一行被解释为代码而不是标记,请将@:放在它前面。
https://stackoverflow.com/questions/16282889
复制相似问题