【问题标题】:Nested conditional not being recognized properly嵌套条件未正确识别
【发布时间】:2011-05-14 04:44:22
【问题描述】:

我正在尝试使用 Razor 在 if/else 中嵌套一个 foreach,但我遇到了 Razor 的一些问题,声称我缺少右括号。代码如下,我注意到 Visual Studio 没有突出显示语法的“else”,我猜这就是问题所在:

    @if (ViewBag.user.administrativeRole != null)
    {
        <select name="administrativeRole" id="administrativeRole" class="selectInput" disabled="disabled">   
    }
    else // this else isn't syntax highlighted 
    {
        <select name="administrativeRole" id="administrativeRole" class="selectInput">
        @foreach (var role in ViewBag.roles)
        {
        if (ViewBag.user.administrativeRole != null && ViewBag.user.administrativeRole == role.superadmin)
        {
            <option value="@role.id" selected="selected">@role.name</option>
        }
        else
        {
            <option value="@role.id">@role.name</option>
        }
    }
}
</select>

会产生以下错误:

if 块缺少结束“}” 特点。确保你有一个 匹配所有的“}”字符 此块中的“{”字符,以及 没有“}”字符 被解释为标记。

Line 58: @if (ViewBag.user.administrativeRole != null)
Line 59: {
Line 60:    <select name="administrativeRole" id="administrativeRole" class="selectInput" disabled="disabled">  

有什么想法吗?我猜我只是在语法上有点笨拙,因为我是 Razor 的新手。

【问题讨论】:

    标签: asp.net-mvc-3 razor


    【解决方案1】:

    Slaks 使用 Html.DropDown,但如果您打算按照您描述的方式使用代码,请尝试如下:

        @{
            if (ViewBag.user.administrativeRole != null)
            {
                @:<select name="administrativeRole" id="administrativeRole" class="selectInput" disabled="disabled">   
            }
            else  
            {
                @:<select name="administrativeRole" id="administrativeRole" class="selectInput">
                foreach (var role in ViewBag.roles)
                {
                     if (ViewBag.user.administrativeRole != null ViewBag.user.administrativeRole == role.superadmin)
                     {
                         @:<option value="@role.id" selected="selected">@role.name</option>
                     }
                     else
                     {
                        @:<option value="@role.id">@role.name</option>
                     }
                }
            }
         }
     </select>
    

    它的作用是创建一个代码块,然后将您实际想要打印到标记的内容转义出来。

    【讨论】:

    • 你可以写@if(...){...}。您不需要外部代码块。
    【解决方案2】:

    您的&lt;/select&gt; 放错地方了。

    它需要在第二个} 之后,与&lt;select&gt; 处于同一级别。

    因为不是,Razor 将最后一个 } 视为标记而不是代码,因此外部 if 不会关闭。

    另外,你应该打电话给Html.DropDown

    【讨论】:

    • 非常感谢。将所有内容都转换为 HTML 助手,让整个混乱更加清晰。
    【解决方案3】:

    if 的右括号在哪里。也许我的手机显示屏没有滚动到它,但我看到一个不见了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-17
      • 2018-10-28
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多