我正试图在一个使用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的新手。
答案 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的结束支撑在哪里?也许我的手机显示屏没有滚动到它,但我看到一个缺失