Der*_*rek 17 c# asp.net-mvc razor
我正在尝试设置一个从Datatable中提取的下拉菜单.这适用于菜单的第一级.
工作代码:
<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>
Run Code Online (Sandbox Code Playgroud)
当我尝试添加嵌套的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>
Run Code Online (Sandbox Code Playgroud)
我认为您不需要在分配值的行前面写@上@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>
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题,为什么右括号不被识别。
TL;DR
由于您再次处于代码区域,因此不需要@-sign。
详细信息
该<li>...</li>部分定义了一个html区域,其中文本被解释为html。
关闭后,外部代码</li>区域立即再次激活,并且文本被解释为C#代码。因此,可以将其分配给。在这里添加- 符号与在“正常”cs 文件中具有相同的后果:
这是一个语法错误。 Level1@dr
| 归档时间: |
|
| 查看次数: |
24953 次 |
| 最近记录: |