嵌套条件无法正确识别

时间:2011-05-12 22:41:09

标签: asp.net-mvc-3 razor

我正试图在一个使用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的新手。

3 个答案:

答案 0 :(得分:5)

使用Html.DropDown处理Slaks,但如果您按照描述的方式使用代码,请尝试这样:

    @{
        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>

这样做是为了制作一个代码块,然后将实际想要打印的内容转移到标记中。

答案 1 :(得分:1)

您的</select>位置错误。

它必须在第二个}之后,与<select>处于同一级别。

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

此外,您应该拨打Html.DropDown

答案 2 :(得分:0)

if的结束支撑在哪里?也许我的手机显示屏没有滚动到它,但我看到一个缺失