首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >嵌套的if语句混淆了Razor

嵌套的if语句混淆了Razor
EN

Stack Overflow用户
提问于 2013-04-29 23:49:43
回答 3查看 29.7K关注 0票数 18

我正在尝试设置一个从数据表中拉出的下拉菜单。这对于菜单的第一级非常有效。

工作代码:

代码语言:javascript
复制
<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循环的闭括号。

代码中断:

代码语言:javascript
复制
<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>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-29 23:55:03

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

票数 14
EN

Stack Overflow用户

发布于 2013-04-30 00:01:20

我不认为您需要在将值赋给LevelX的行中的@dr[...]前面编写@

代码语言:javascript
复制
<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中有相同的结果:

这是一个语法错误。

票数 4
EN

Stack Overflow用户

发布于 2017-01-06 09:19:10

根据this answer,如果一行被解释为标记而不是代码,请在其前面加上@。如果一行被解释为代码而不是标记,请将@:放在它前面。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16282889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档