18

我正在尝试设置一个从数据表中提取的下拉菜单。这适用于菜单的第一级。

工作代码:

<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,您会注意到@foreachRazor 无法识别循环的右括号。

代码中断:

<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>
4

3 回答 3

14

您需要将有问题的部分包装在<text>标签中。看到这个答案:https ://stackoverflow.com/a/6099659/1451531

于 2013-04-29T15:55:03.150 回答
4

我认为您不需要在分配值的行@的前面写@dr[...]LevelX

<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

详细信息
<li>...</li>部分定义了一个html区域,其中文本被解释为html
关闭后</li>外部代码区域立即再次处于活动状态,文本被解释为C# -code。因此,分配到Level1是可能的。在此处添加@- 符号与在“正常”cs 文件中的结果相同: 这是一个语法错误。 dr

于 2013-04-29T16:01:20.243 回答
1

根据这个答案,如果一行被解释为标记而不是代码,请将 @ 放在它前面。如果一行被解释为代码而不是标记,请将 @: 放在它前面。

于 2017-01-06T01:19:09.863 回答